Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 对于setter方法,为什么irb会回显赋值的右侧而不是返回值?_Ruby_Irb - Fatal编程技术网

Ruby 对于setter方法,为什么irb会回显赋值的右侧而不是返回值?

Ruby 对于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都会回显方法的返回值。为什么通过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始终返回最初分配给它们的值 这是一种设计选择。我们将赋值的值定义为 右侧表达式的值,而不是 分配方法


还没有找到具体的答案为什么

具体而言:

如果定义了一个«类似赋值»的方法(末尾有一个等号),Ruby将在调用该方法时执行该方法,但将始终返回提供的参数,而不会返回该方法的结果

想一想这样的事情,许多人会习惯于从其他语言(如C)中看到:

foo.x = foo.y = 3
您可以假设
foo.x
foo.y
都设置为
3
,由于这个Ruby“特性”,您是对的


编辑:奥雅纳的帖子有一个很好的链接,链接到一个为什么…

我只希望我能把你的两个回答都标记为答案。堆叠分配示例很有意义。