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

ruby的Hash.replace或Array.replace有什么用?

发布时间:2020-12-17 01:46:22 所属栏目:百科 来源:网络整理
导读:我总是在Array和Hash文档中看到replace,我一直认为这很奇怪. 我确信我做过很多次这样的事: a = [:a,:b,:c,:d]...if some_condition a = [:e,:f]end 但我从未想过要用这个: a = [:a,:d]...if some_condition a.replace [:e,:f]end 我认为这是预期的用途.这
我总是在Array和Hash文档中看到replace,我一直认为这很奇怪.

我确信我做过很多次这样的事:

a = [:a,:b,:c,:d]

...

if some_condition
    a = [:e,:f]
end

但我从未想过要用这个:

a = [:a,:d]

...

if some_condition
    a.replace [:e,:f]
end

我认为这是预期的用途.这真的可以节省内存,还是有其他好处,还是仅仅是一种风格的东西?

解决方法

我认为预期的用途是修改已传递给方法的就地数组.例如:

def m(a)
    a.replace(%w[a b])
end

a = %w[x y z]
m(a)
# a is now ['a','b']

没有替换,你必须做这样的事情:

def m(a)
    a.clear
    a << 'a' # or use .push of course
    a << 'b'
end

使用replace可以让你一次性完成所有操作,绕过自动收缩和自动增长(可能涉及复制一些内存)的行为,这可能是元素替换数组内容(而不是数组本身!)的副作用.性能优势(如果有的话)可能只是一个额外的,主要意图可能是获取指针指向行为而不必引入指针或将数组包装在额外的对象中.

(编辑:李大同)

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

    推荐文章
      热点阅读