为什么赋值的值总是参数的值? [复制]

2023-12-29

有人愿意解释一下为什么在旧版本的Ruby中,赋值的结果是属性设置方法返回的值,但是在Ruby 1.8之后,赋值的值总是参数的值;该方法的返回值被丢弃。在下面的代码中,旧版本的 Ruby 会将结果设置为 99。现在结果将设置为 2。

class Test
  def val=(val)
    @val = val
    return 99
  end
end

t = Test.new
result = (t.val = 2)
result # => 2

这一变化背后的原因是什么?


当您想要将相同的值分配给多个变量时,将分配链接在一起的情况并不少见。这在其他语言中更为常见。

@user_id = user.id = next_user_id

但是,当您没有考虑这一点并且返回值与输入值不同时会发生什么?

class User
  def id=(name)
    @id = name
    @modified = true
  end

  def modified?
    @modified
  end
end

这段代码将完全正常工作,直到有一天,当您将其放入如上所述的赋值链中时,突然您会得到意想不到的结果。

因此,解释器会执行某种巫术并确保赋值的 RHS 是返回值,而丢弃实际的返回值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么赋值的值总是参数的值? [复制] 的相关文章

随机推荐