2013-09-01 24 views
0

我目前已經有一個涉及到很多新類實例的系統,所以我必須使用一個數組來分配它們,如下所示:Create and initialize instances of a class with sequential names在陣列中創建新的類實例而不覆蓋現有的類

但是,只要出現新的實例,我將不斷添加新的實例,而不會覆蓋現有實例。可能我的現有代碼的某些驗證和修改版本是最佳選擇?

這是我的代碼,現在每次運行時,現有的數據都會被覆蓋。我希望狀態在被更改時被覆蓋,但我也希望能夠永久存儲一個或兩個變量。

E2A:忽略全局變量,它們只是用於測試。

$allids = [] 
$position = 0 ## Set position for each iteration 

    $ids.each do |x| ## For each ID, do 
     $allids = ($ids.length).times.collect { MyClass.new(x)} ## For each ID, make a new class instance, as part of an array 

     $browser.goto("http://www.foo.com/#{x}") ## Visit next details page 

     thestatus = Nokogiri::HTML.parse($browser.html).at_xpath("html/body/div[2]/div[3]/div[2]/div[3]/b/text()").to_s ## Grab the ID's status 

     theamount = Nokogiri::HTML.parse($browser.html).at_xpath("html/body/div[2]/div[3]/div[2]/p[1]/b[2]/text()").to_s ## Grab a number attached to the ID 

     $allids[$position].getdetails(thestatus, theamount) ## Passes the status to getdetails 

     $position += 1 ## increment position for next iteration 
    end 

E2A2:要去粘貼從我的評論:

嗯,我只是在想,我開始通過將以前的值轉儲到另一個變量,那麼另一個變量抓住新的價值觀,和迭代通過它們查看是否有與之前的值相匹配的值。雖然這是一個相當混亂的方式,但我想,會自動創建一個|| = work? - Joe 7分鐘前

+1

您能準確地說出哪些數據以及您想永久存儲哪個變量嗎? – hedgesky

+0

當然,非常感謝迴應:)應該保留的數據(至少一點點)將是狀態,並且永久存儲在那裏的外部變量將被稱爲進度和消息計數。 – Joe

+0

嗯,我只是在想,我開始時將先前的值轉儲到另一個變量中,然後另一個變量抓取新的值,並遍歷它們以查看是否有與之前的值相匹配的值。雖然這是一個相當混亂的方式,但我想,會自動創建一個|| = work? – Joe

回答

1

如果我理解正確,您需要存儲每個ID的狀態和金額,對不對?如果是的話,那麼這樣的事情會幫助你:

# I'll store nested hash with class instance, status and amount for each id in processed_ids var 
$processed_ids = {} 

$ids.each do |id| 
    processed_ids[id] ||= {} # 
    processed_ids[id][:instance] ||= MyClass.new(id) 
    processed_ids[id][:status] = get_status # Nokogiri method 
    processed_ids[id][:amount] = get_amount # Nokogiri method 
end 

這是什麼代碼做的事:它只有一次創建類的每個ID的情況下,卻總是更新其狀態和數量。

+0

你知道,當人們解釋爲什麼代碼能夠工作時,我真的很喜歡它,而不是代碼的工作原理。非常感謝! :) – Joe

相關問題