Ruby定义运算符过程

mic*_*oo8 5 ruby

如何在ruby中编写一个具有我可以调用的过程的类,如下所示:

a = MyObj.new()
b =  MyObj.new()

c = a * b
d = a / b
e = a - b
Run Code Online (Sandbox Code Playgroud)

这比以下更好:

c = a.multiply(b)
...
Run Code Online (Sandbox Code Playgroud)

谢谢

Phr*_*ogz 6

class Foo
  attr_accessor :value
  def initialize( v )
    self.value = v
  end
  def *(other)
    self.class.new(value*other.value)
  end
end

a = Foo.new(6)
#=> #<Foo:0x29c9920 @value=6>

b = Foo.new(7)
#=> #<Foo:0x29c9900 @value=7>

c = a*b
#=> #<Foo:0x29c98e0 @value=42>
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到可以定义为方法的运算符列表:http :
//phrogz.net/ProgrammingRuby/language.html#operatorexpressions


Mic*_*ohl 6

你已经得到了关于如何定义二元运算符的答案,所以就像这里的小附录-一样,你可以如何定义一元(如负数).

>  class String
..   def -@
..     self.swapcase
..   end
.. end #=> nil
>> -"foo" #=> "FOO"
>> -"FOO" #=> "foo"
Run Code Online (Sandbox Code Playgroud)