ruby - 带有多个参数的 Ruby 重载运算符
问题描述
我有一个包含两个字段(钱包和美分)的 MoneyBox 类。我需要使用这些字段重载 +、- 和 * 操作。如何用两个参数正确实现这些运算符的重载?
class MoneyBox
attr_accessor :wallet, :cent
def initialize(wallet, cent)
@wallet = wallet
@cent = cent
end
def + (obj, obj_cent)
self.wallet = self.wallet + obj.wallet
self.cent = self.cent + obj_cent.cent
return self.wallet, self.cent
end
def - (obj, obj_cent)
self.wallet = self.wallet - obj.wallet
self.cent = self.cent - obj_cent.cent
return self.wallet, self.cent
end
def * (obj,obj_cent)
self.wallet = self.wallet * obj.wallet
self.cent = self.cent * obj_cent
return self.wallet, self.cent
end
end
它应该是这样的:
Cash1 = MoneyBox.new(500, 30)
Cash2 = MoneyBox.new(100, 15)
puts " D1 = #{D1 = (Cash1-(Cash2*2))}" # 500,30 - 100,15*2 = 300,0
解决方案
x + y
如果要重载运算符以获取两个参数,则不能使用典型语法。
相反,您必须使用.+
,请参阅以下内容:
class Foo
def initialize(val)
@val = val
end
def +(a,b)
@val + a + b
end
end
foo = Foo.new(1)
foo.+(2,3)
# => 6
推荐阅读
- php - 将 getBody() 分配给变量 Guzzle
- mysql - 当同步为真时,TypeORM 抛出 QueryFailedError Table already exists on MySQL
- javascript - 当 UI 中没有相关更改时,有没有办法测试使用 RTL 调用了通过 mapDispatchToProps 传递的函数?
- typescript - Firestore 错误:Update() 需要单个 JavaScript 对象或字段/值对的交替列表
- python - Python函数返回维度数组的索引
- android - 无法在 Skype 中打开 Android 深层链接
- git - GIT:一个功能分支中的多个 Jira 票证
- sql - 将 jsonb 哈希转换为 json 字符串的 SQL 语句
- javascript - 如何防止用户从前端更改计时器值?
- javascript - 将字符串 "{a:2, b:4}" 转换为对象 {a:2, b:4}