2013-12-24 33 views
2

對象的數組Intitalizing對象我創建了一個小Ruby類在這裏:從另一個類的Ruby

class Star 

#Star initialization 
def initialize(star, number) 
    @star = star 
    @number = number 
end 
end 

,我期待初始化一個叫太陽系有100顆恆星的類。這就是我所做的,似乎並不奏效。任何幫助將不勝感激。我不能在構造函數中初始化數組。然後,我希望能夠打印出星號數組中的所有元素。任何幫助,這將不勝感激。另外,爲了最終將這個數據移動到數據庫中,使用rails或者其他類型的特性,我應該考慮使用哈希函數還是使用一些輔助函數將其轉換爲mySQL或其他數據庫?我最終想寫入這個軌道,並有一個動態的網站。

再次,非常感謝。

+0

通常'太陽系'只有一顆恆星 - 它被命名爲「太陽」:)也許有更好的模型名稱,如「星團」? – Meredian

回答

3

您的問題是在每次迭代中爲@stars_array變量分配一個新值。有多種方法來對付它:

@stars_array = (0..99).map { |i| Star.new('unknown_star',i) } 

順便說一句,有一對夫婦的設計問題(只爲您的關注):

  1. 爲什麼變量稱爲stars_array,不只是stars

  2. 爲什麼Star類的實例裏面會有一些名爲@star的對象?遞歸? :)看起來像@name將是正確和更清晰的屬性的名稱。

  3. 不要錯過縮進。


編輯:關於DB-映射。最常見的方式 - 從ActiveRecord :: Base繼承這兩個類,並創建從太陽系到星系的一對多關係。每個班級都有自己的桌子。絕對沒有努力。

1

您在每次循環時分配新對象。解決方法是添加新的對象:

@stars_array << Star.new('unknown_star',i) 

或者,如果你願意的話,而不是符號:

@stars_array.push(Star.new('unknown_star',i)) 

或者,更簡潔:

100.times {|i| @stars_array << Star.new('unknown_star',i) } 
0

有幾件事情修復以使其工作。在你的循環中,你爲數組賦值一個新值,而不是追加到它。其次,在你的循環中,你使用的是局部變量stars_array而不是實例變量@stars_array。

你的初始化方法應該是這樣的:

def initialize(part_of_solar_system) 
    @part_of_solar_system = part_of_solar_system 
    @stars_array = [] 
    for i in 0..99 
    @stars_array << Star.new('unknown_star', i) 
    end 
end 

此外,您可能想重溫你的Ruby成語,像寧願snake_case以駝峯爲變量名和有利於各避免for循環,例如

def initialize(part_of_solar_system) 
    @part_of_solar_system = part_of_solar_system 
    @stars_array = [] 
    (0..99).each { |i| @stars_array << Star.new('unknown_star', i) } 
end