ruby中正确的加法/乘法的存在?
发布时间:2020-12-17 03:11:18 所属栏目:百科 来源:网络整理
导读:我已经看过如何在 Ruby中重载和*,所以 my_obj其他调用my_obj. (其他).在 Python中,你用__add__执行此操作,并且有一个相应的__radd__用于重载其他my_obj.在Ruby中是否真的没有相应的右侧加法/乘法,这是否有必要重新定义其他潜在类别? 简而言之:说我有一个对
我已经看过如何在
Ruby中重载和*,所以
my_obj其他调用my_obj. (其他).在 Python中,你用__add__执行此操作,并且有一个相应的__radd__用于重载其他my_obj.在Ruby中是否真的没有相应的右侧加法/乘法,这是否有必要重新定义其他潜在类别? 简而言之:说我有一个对象X属于我定义的一个新类.为X 5编写代码很容易,但似乎为了处理5 X我需要重新定义Fixnum. .这是真的? 解决方法
不,您不需要重新定义Fixnum#(或ruby的数字类的任何其他算术方法).如果两个操作数不是同一个类,则数值类的算术方法将调用coerce.因此,如果为您的类定义一个强制方法,5 instance_of_your_class将正常工作而不对Fixnum#进行任何更改.
编辑:以下是使用强制的示例: class MyNum attr_accessor :num def initialize(num) @num = num end def +(o) lhs,rhs = coerce(o) MyNum.new(lhs.num + rhs.num) end def coerce(o) if o.is_a? MyNum [self,o] else [self,MyNum.new(o)] end end end MyNum.new(5)+3 #=> #<MyNum:0x87fca08 @num=8> 3+MyNum.new(5) #=> #<MyNum:0x8807980 @num=8> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |