加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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).返回新值并让调用者自行更新变量(如果有的话).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读