为什么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相呼应,因为那是实际的回报值 。 为什么是这样?
在此主题中关注@Matz回复:
Setter总是返回它们最初分配的值它是一个设计选择。 我们将赋值的值定义为右手表达式的值,而不是赋值方法的返回值。
没有找到具体的答案为什么, 但这个页面作为讨论它 。
特别:
如果你定义一个«assignment-like»方法(在末尾有一个等号),Ruby会在你调用它时执行该方法,但是总是返回提供的参数,而不是方法的结果。
想想这样的事情,许多人习惯于从C等其他语言中看到:
foo.x = foo.y = 3
你假设foo.x
和foo.y
都被设置为3
,并且由于这个Ruby“function”,你是对的。
编辑:Arup的post有一个很好的链接,为什么…