似乎令人惊讶的是,在所有其他情况下,irb将回显方法的返回值。为什么通过setter的赋值表现不同?
我正在使用Ruby 2.2.2。
irb(main):001:0> def x=(value); puts "puts_from_x"; "returned_string_from_x"; end
=> nil
irb(main):002:0> self.x = 3
puts_from_x
=> 3
更新
我突然意识到它与rhs相呼应,因为那是实际返回值。这是为什么?
答案 0 :(得分:5)
点击此thread中的@Matz回复:
Setter始终返回最初分配的值 这是一个设计选择。我们将赋值的值定义为 右手表达式的值,而不是来自的返回值 分配方法。
答案 1 :(得分:4)
没有找到具体的答案,but this page as a discussion about it。
具体做法是:
如果你定义了一个«assignment-like»方法(在末尾有一个等号),Ruby会在你调用它时执行该方法,但是总是返回提供的参数,而不是方法的结果。
想想这样的事情,许多人习惯于从其他语言中看到,比如C:
foo.x = foo.y = 3
您认为foo.x
和foo.y
都设置为3
,而且由于这个Ruby“功能”,您是对的。
编辑:Arup的帖子有一个很好的链接,为什么......