如何在ruby中编写一个具有我可以调用的过程的类:
a = MyObj.new()
b = MyObj.new()
c = a * b
d = a / b
e = a - b
这比:
更好c = a.multiply(b)
...
感谢
答案 0 :(得分:5)
你已经得到了关于如何定义二元运算符的答案,所以就像这里的小附录一样,你可以如何定义一元-
(就像负数一样)。
> class String
.. def -@
.. self.swapcase
.. end
.. end #=> nil
>> -"foo" #=> "FOO"
>> -"FOO" #=> "foo"
答案 1 :(得分:4)
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>
您可以在此处找到可定义为方法的运算符列表:
http://phrogz.net/ProgrammingRuby/language.html#operatorexpressions
答案 2 :(得分:4)
只需创建名称为您要重载的运算符的方法,例如:
class MyObj
def / rhs
# do something and return the result
end
def * rhs
# do something and return the result
end
end
答案 3 :(得分:3)
在Ruby中,*
运算符(以及其他此类运算符)实际上只是调用与运算符同名的方法。因此,要覆盖*
,您可以执行以下操作:
class MyObj
def *(obj)
# Do some multiplication stuff
true # Return whatever you want
end
end
您可以对其他运营商使用类似的技术,例如/
或+
。 (请注意,您无法在Ruby中创建自己的运算符。)