微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐