当使用splat运算符通过引用将参数传递给块时,似乎会复制参数.
我有这个:
def method
a = [1,2,3]
yield(*a)
p a
end
method {|x,y,z| z = 0}
#=> this puts and returns [1, 2, 3] (didn't modified the third argument)
Run Code Online (Sandbox Code Playgroud)
我如何通过引用传递这些参数?如果我直接传递数组似乎可行,但splat运算符在这里更实用,直观和可维护.
在Ruby中,当你编写时,x = value你正在创建一个新的局部变量,x无论它是否存在(如果它存在,名称只是反弹而原始值保持不变).因此,您无法以这种方式就地更改变量.
整数是不可变的.因此,如果您发送一个整数,则无法更改其值.请注意,您可以更改可变对象(字符串,哈希,数组......):
def method
a = [1, 2, "hello"]
yield(*a)
p a
end
method { |x,y,z| z[1] = 'u' }
# [1, 2, "hullo"]
Run Code Online (Sandbox Code Playgroud)注意:我试图回答你的问题,现在我的意见是:更新方法或块中的参数会导致错误的代码(你再也没有参考透明度了).返回新值并让调用者自行更新变量(如果有的话).
| 归档时间: |
|
| 查看次数: |
2107 次 |
| 最近记录: |