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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...