0

除了将参数与绑定一起传递之外,还有什么方法可以改变块/方法中传递的对象以使更改反映在初始对象中?

想象一下,要求是转换以下内容:

{one:1, two:2, three:3, four:4}进入{one:"1", two:"22", three:"333", four:"4444"}

我在想这样的事情:

{one:1, two:2, three:3, four:4}.each!{ |k,v| v = v.to_s * v }

对传递变量的更改会反映在实际哈希中。

我认为拥有这样的能力可能更有效?这样块就可以直接操纵这些对象,而不必创建新对象然后将其分配给它。

不知何故,解决这样的问题涉及对象数据类型的多次不必要的更改,并且可能效率低下:

new_hash = Hash[{one:1, two:2, three:3, four:4}.collect{ |k,v| [k, v.to_s * v] }]

所以想知道,是否有类似的东西!去做吧。

4

1 回答 1

2

我不知道类似 an 的东西each!,但这应该可以完成您想要做的事情:

test = {one:1, two:2, three:3, four:4}

test.each{ |key,val| test[key] = val.to_s * val }

p test

#=> {:one=>"1", :two=>"22", :three=>"333", :four=>"4444"}
于 2013-11-04T01:50:34.457 回答