Ruby : 在另一个 class 中调用 assign 方法
Ruby : call the assign method in another class
我这样做 :
class Money
attr_reader :value
def initialize(init_amount = 0)
self.value = init_amount
end
def value=(new_amount)
if new_amount >= 0
@value = new_amount
else
puts "ERROR: value can't be less than 0."
end
end
def to_s
("%.2f" % @value).split(".").join(",")
end
end
在另一个 class 中,我称我的对象为:
load 'Money.rb'
class Transaction
attr_reader :amount
def initialize(init_amount)
@amount = Money.new(init_amount)
end
def amount=(new_amount)
@amount = new_amount # Why it doesn't work??
# Why I need to do this ?
# @amount.value=(new_amount)
end
end
为什么@amount = new_amount 没有调用 Money class 的 value=() 方法?
非常感谢您的帮助!
@amount
被初始化为 Money
的实例。
我假设 new_amount
是像 13.33
这样的双数。然后,当然,您所做的就是获取 @amount
并将其简单地设置为 13.33
。所以,现在,您已经覆盖了 Money
的实例并将其替换为 13.33
.
您的 value=
是一个 setter 方法。这就是您用来从其实现外部设置对象的特定属性的方法。它是一个 API 你让世界获得改变货币价值的途径。所以,在Transaction中,你需要用你做的这个API来改变值。
因此,当然,如果您想更改 Money
实例的值,则必须执行 @amount.value = new_amount
.
编辑:
您将永远无法对 @amount = new_amount
执行操作并期望它设置您的 Money 实例的 value
。为此,您必须覆盖 Ruby 中的赋值运算符,这是不可能的。
我这样做 :
class Money
attr_reader :value
def initialize(init_amount = 0)
self.value = init_amount
end
def value=(new_amount)
if new_amount >= 0
@value = new_amount
else
puts "ERROR: value can't be less than 0."
end
end
def to_s
("%.2f" % @value).split(".").join(",")
end
end
在另一个 class 中,我称我的对象为:
load 'Money.rb'
class Transaction
attr_reader :amount
def initialize(init_amount)
@amount = Money.new(init_amount)
end
def amount=(new_amount)
@amount = new_amount # Why it doesn't work??
# Why I need to do this ?
# @amount.value=(new_amount)
end
end
为什么@amount = new_amount 没有调用 Money class 的 value=() 方法?
非常感谢您的帮助!
@amount
被初始化为 Money
的实例。
我假设 new_amount
是像 13.33
这样的双数。然后,当然,您所做的就是获取 @amount
并将其简单地设置为 13.33
。所以,现在,您已经覆盖了 Money
的实例并将其替换为 13.33
.
您的 value=
是一个 setter 方法。这就是您用来从其实现外部设置对象的特定属性的方法。它是一个 API 你让世界获得改变货币价值的途径。所以,在Transaction中,你需要用你做的这个API来改变值。
因此,当然,如果您想更改 Money
实例的值,则必须执行 @amount.value = new_amount
.
编辑:
您将永远无法对 @amount = new_amount
执行操作并期望它设置您的 Money 实例的 value
。为此,您必须覆盖 Ruby 中的赋值运算符,这是不可能的。