Ruby中Array#map的隐式返回值

ibl*_*lue 1 ruby

给出以下代码:

class MagicList
  def items=(array)
    @items = array.map{|x| x*2}
  end

  def items
    @items
  end
end

list = MagicList.new
returns = list.items=([1, 2, 3])

puts returns.inspect    # => [1, 2, 3]
puts list.items.inspect # => [2, 4, 6]
Run Code Online (Sandbox Code Playgroud)

我期望值returns是[2, 4, 6],因为@items以及array.map{|x| x*2}两者都返回这个值.为什么[1, 2, 3]?

Gar*_*eth 9

因为Ruby赋值总是返回它们传递的项,而不管setter=方法返回什么.

另请参见是否可以让class.property = x返回x以外的其他内容?