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