加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读