如何使用一行代码创建三个对象?

时间:2011-06-19 08:55:23

标签: ruby variable-assignment

如何用一行代码创建三个空哈希?

我知道a = b = c = Hash.new不起作用,因为它会创建对同一个Hash对象的三个引用。

a,b,c = Hash.new会将Hash分配给a,但bc仍为nil

我知道我可以做a, b, c = Hash.new, Hash.new, Hash.new,但这看起来不是很干。

4 个答案:

答案 0 :(得分:5)

正如我发表的评论,我认为a, b, c = {}, {}, {}是最好的方式,因为它简短易读。如果你真的想以更复杂的方式做这件事,那么这样的事情就会起作用:

>> a, b, c = Array.new(3) { Hash.new } #=> [{}, {}, {}]
>> a #=> {}
>> b #=> {}
>> c #=> {}

答案 1 :(得分:3)

我不确定我是否会使用它,但有可能:

a, b, c = 3.times.map { Hash.new }
# or
a, b, c = (1..3).map { Hash.new }

答案 2 :(得分:1)

虽然你已经标记了一个答案,但我会选择另一种我认为最简单的方式:

a,b,c = [{}]*3

答案 3 :(得分:1)

  

我不确定我是否会使用它,但有可能:

a, b, c = 3.times.map { Hash.new }
#or
a, b, c = (1..3).map { Hash.new }

还有另一个答案..因为您只需使用{}代替Hash.new 分配可以是这样的:

a, b, c = 3.times.map{{}}