比方说,我有红宝石一类计数器,定义为灌装红宝石阵列默认对象
class Counter
attr_accessor :starting_value
def initialize(starting_value)
@starting_value = starting_value
end
def tick
@starting_value = @starting_value + 1
end
end
,我想,以填补该对象的数组,使用默认的参数,如: counter_arr = Array.new(5, Counter.new(0))
这几乎是我想要的,除了我现在有一个数组包含5次计数器的同一个实例,而不是5个新计数器的数组。即,当我运行该代码的
counter_arr = Array.new(5, Counter.new(0))
counter_arr[0].tick
counter_arr.each do |c|
puts(c.starting_value)
end
I输出
1
1
1
1
1
代替
1
0
0
0
0
我想知道,什么是 “红宝石式的” 的方式来初始化与多个阵列对象的新实例?
不要忘记像'@starting_value + = 1'这样的语法功能。这通常不太冗长,并避免印刷错误。 – tadman
这段代码与'Array :: new'文档的[“Common gotchas”部分](http://ruby-doc.org/core/Array)中的例子几乎一致。html#method-c-new-label-Common + gotchas)它回答了这个问题。 –