为什么irb回显赋值的右侧而不是setter方法的返回值?

时间:2015-05-21 19:19:14

标签: ruby irb

似乎令人惊讶的是,在所有其他情况下,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相呼应,因为那是实际返回值。这是为什么?

2 个答案:

答案 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.xfoo.y都设置为3,而且由于这个Ruby“功能”,您是对的。

编辑:Arup的帖子有一个很好的链接,为什么......

相关问题