Ruby 对于setter方法,为什么irb会回显赋值的右侧而不是返回值?
令人惊讶的是,在所有其他情况下,irb都会回显方法的返回值。为什么通过setter分配的行为会有所不同 我正在使用Ruby 2.2.2Ruby 对于setter方法,为什么irb会回显赋值的右侧而不是返回值?,ruby,irb,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相呼应,因为这是实际的返回值。这是为什么?
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始终返回最初分配给它们的值 这是一种设计选择。我们将赋值的值定义为 右侧表达式的值,而不是 分配方法
还没有找到具体的答案为什么 具体而言: 如果定义了一个«类似赋值»的方法(末尾有一个等号),Ruby将在调用该方法时执行该方法,但将始终返回提供的参数,而不会返回该方法的结果 想一想这样的事情,许多人会习惯于从其他语言(如C)中看到:
foo.x = foo.y = 3
您可以假设foo.x
和foo.y
都设置为3
,由于这个Ruby“特性”,您是对的
编辑:奥雅纳的帖子有一个很好的链接,链接到一个为什么…我只希望我能把你的两个回答都标记为答案。堆叠分配示例很有意义。