有人愿意解释一下为什么在旧版本的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(使用前将#替换为@)