[前][次][番号順一覧][スレッド一覧]

ruby-changes:14604

From: keiju <ko1@a...>
Date: Wed, 27 Jan 2010 23:29:05 +0900 (JST)
Subject: [ruby-changes:14604] Ruby:r26448 (trunk): * lib/matrix.rb: add exception Matrix::ErrOperationNotImplemented

keiju	2010-01-27 23:28:47 +0900 (Wed, 27 Jan 2010)

  New Revision: 26448

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26448

  Log:
    * lib/matrix.rb: add exception Matrix::ErrOperationNotImplemented
       [ruby-dev:40149].
     * lib/matrix.rb: change message of exception
       Matrix::ErrOperationNotDefined [ruby-dev:40150], [ruby-dev:40176].
     * lib/matrix.rb: add method Vector#/ [ruby-dev:40151].
     * lib/matrix.rb(Matrix::Scalar#+,-,/): delete meaningless when
       switch. [ruby-dev:40149]

  Modified files:
    trunk/ChangeLog
    trunk/lib/matrix.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 26447)
+++ ChangeLog	(revision 26448)
@@ -1,3 +1,13 @@
+Wed Jan 27 23:27:54 2010  Keiju Ishitsuka  <keiju@e...>
+
+	* lib/matrix.rb: add exception Matrix::ErrOperationNotImplemented
+	  [ruby-dev:40149].
+	* lib/matrix.rb: change message of exception
+	  Matrix::ErrOperationNotDefined [ruby-dev:40150], [ruby-dev:40176].
+	* lib/matrix.rb: add method Vector#/ [ruby-dev:40151].
+	* lib/matrix.rb(Matrix::Scalar#+,-,/): delete meaningless when
+	  switch. [ruby-dev:40149]
+
 Wed Jan 27 23:22:54 2010  Kazuhiro NISHIYAMA  <zn@m...>
 
 	* vm_dump.c (bugreport_backtrace): trivial change.
Index: lib/matrix.rb
===================================================================
--- lib/matrix.rb	(revision 26447)
+++ lib/matrix.rb	(revision 26448)
@@ -26,7 +26,8 @@
 
   def_exception("ErrDimensionMismatch", "\#{self.name} dimension mismatch")
   def_exception("ErrNotRegular", "Not Regular Matrix")
-  def_exception("ErrOperationNotDefined", "This operation(%s) can\\'t defined")
+  def_exception("ErrOperationNotDefined", "Operation(%s) can\\'t be defined: %s op %s")
+  def_exception("ErrOperationNotImplemented", "Sorry, Operation(%s) not implemented: %s op %s")
 end
 
 #
@@ -497,7 +498,7 @@
   def +(m)
     case m
     when Numeric
-      Matrix.Raise ErrOperationNotDefined, "+"
+      Matrix.Raise ErrOperationNotDefined, "+", self.class, m.class
     when Vector
       m = Matrix.column_vector(m)
     when Matrix
@@ -525,7 +526,7 @@
   def -(m)
     case m
     when Numeric
-      Matrix.Raise ErrOperationNotDefined, "-"
+      Matrix.Raise ErrOperationNotDefined, "-", self.class, m.class
     when Vector
       m = Matrix.column_vector(m)
     when Matrix
@@ -649,9 +650,9 @@
         x *= x
       end
     elsif other.kind_of?(Float) || defined?(Rational) && other.kind_of?(Rational)
-      Matrix.Raise ErrOperationNotDefined, "**"
+      Matrix.Raise ErrOperationNotImplemented, "**", self.class, other.class
     else
-      Matrix.Raise ErrOperationNotDefined, "**"
+      Matrix.Raise ErrOperationNotDefined, "**", self.class, other.class
     end
   end
 
@@ -976,9 +977,7 @@
       when Numeric
         Scalar.new(@value + other)
       when Vector, Matrix
-        Scalar.Raise WrongArgType, other.class, "Numeric or Scalar"
-      when Scalar
-        Scalar.new(@value + other.value)
+        Scalar.Raise ErrOperationNotDefined, "+", @value.class, other.class
       else
         x, y = other.coerce(self)
         x + y
@@ -990,9 +989,7 @@
       when Numeric
         Scalar.new(@value - other)
       when Vector, Matrix
-        Scalar.Raise WrongArgType, other.class, "Numeric or Scalar"
-      when Scalar
-        Scalar.new(@value - other.value)
+        Scalar.Raise ErrOperationNotDefined, "-", @value.class, other.class
       else
         x, y = other.coerce(self)
         x - y
@@ -1016,7 +1013,7 @@
       when Numeric
         Scalar.new(@value / other)
       when Vector
-        Scalar.Raise WrongArgType, other.class, "Numeric or Scalar or Matrix"
+        Scalar.Raise ErrOperationNotDefined, "/", @value.class, other.class
       when Matrix
         self * other.inverse
       else
@@ -1030,9 +1027,10 @@
       when Numeric
         Scalar.new(@value ** other)
       when Vector
-        Scalar.Raise WrongArgType, other.class, "Numeric or Scalar or Matrix"
+        Scalar.Raise ErrOperationNotDefined, "**", @value.class, other.class
       when Matrix
-        other.powered_by(self)
+        #other.powered_by(self)
+        Scalar.Raise ErrOperationNotImplemented, "**", @value.class, other.class
       else
         x, y = other.coerce(self)
         x ** y
@@ -1214,6 +1212,8 @@
       Vector.elements(els, false)
     when Matrix
       Matrix.column_vector(self) * x
+    when Vector
+      Vector.Raise ErrOperationNotDefined, "*", self.class, x.class
     else
       s, x = x.coerce(self)
       s * x
@@ -1258,6 +1258,22 @@
     end
   end
 
+  #
+  # Vector division.
+  #
+  def /(x)
+    case x
+    when Numeric
+      els = @elements.collect{|e| e / x}
+      Vector.elements(els, false)
+    when Matrix, Vector
+      Vector.Raise ErrOperationNotDefined, "/", self.class, x.class
+    else
+      s, x = x.coerce(self)
+      s / x
+    end
+  end
+
   #--
   # VECTOR FUNCTIONS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
   #++

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]