我有这个类定义:
class Test
attr_accessor :state
def multiple_state=(times)
@state *= times
end
end
obj = Test.new
obj.state = 2
puts #{obj.multiple_state=4}
我认为输出是8,因为它是最后一个的值 表达式在multiple_state中计算。 (?)
但输出是4。
我对最后一个表达的理解是错误的吗?
感谢。
答案 0 :(得分:5)
Ruby的setter方法的语法糖总是返回赋值的右侧,即使你在方法中做了其他事情。有条不紊的Rubyist比我更好:
Setter方法不会返回您的想法。当你使用 语法糖,让你调用=看起来像赋值的方法, Ruby认真对待赋值语义。作业(如x = 1) 评估他们右侧的任何东西。方法通常返回 执行期间评估的最后一个表达式的值。但是=方法调用 表现得像赋值:表达式ticket.price = 63.00的值是 63.00,即使ticket =方法返回字符串"哈哈!"。这个想法是 保持语义一致。在引擎盖下,这是一个方法调用;但它看起来 就像一个任务一样,行为就像一个关于它的价值的任务 表达。
有根据的Rubyist - 第3.3.3章