比方說,我有紅寶石一類計數器,定義爲灌裝紅寶石陣列默認對象
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)它回答了這個問題。 –