ruby – 通过引用具有splat运算符的块传递参数
发布时间:2020-12-17 03:46:57 所属栏目:百科 来源:网络整理
导读:当使用splat运算符通过引用将参数传递给块时,似乎会复制参数. 我有这个: def method a = [1,2,3] yield(*a) p aendmethod {|x,y,z| z = 0}#= this puts and returns [1,3] (didn't modified the third argument) 我如何通过引用传递这些参数?如果我直接传
当使用splat运算符通过引用将参数传递给块时,似乎会复制参数.
我有这个: def method a = [1,2,3] yield(*a) p a end method {|x,y,z| z = 0} #=> this puts and returns [1,3] (didn't modified the third argument) 我如何通过引用传递这些参数?如果我直接传递数组似乎有效,但splat运算符在这里更加实用,直观和可维护. 解决方法
>在Ruby中,当你写x = value时,你正在创建一个新的局部变量x,无论??它是否存在(如果存在,名称只是反弹而且原始值保持不变).因此,您无法以这种方式就地更改变量.
>整数是不可变的.因此,如果您发送一个整数,则无法更改其值.请注意,您可以更改可变对象(字符串,哈希,数组……): def method a = [1,"hello"] yield(*a) p a end method { |x,z| z[1] = 'u' } # [1,"hullo"] 注意:我试图回答你的问题,现在我的意见是:更新方法或块中的参数会导致错误的代码(你不再有referential transparency).返回新值并让调用者自行更新变量(如果有的话). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |