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 中的赋值运算符,这是不可能的。