簡體   English   中英

如何遍歷循環並在每次Ruby迭代中創建一個新對象?

[英]How to go through a loop and create a new object with each iteration Ruby?

我看到了這個問題的幾種變體,但並未真正找到可靠的答案。

因此,我有一個URLS數組。 我想遍歷該數組,並為每個單獨的URL創建一個WebPages類的實例。

因此,如果數組URLS中有5個URL,那么我將創建5個WebPage對象。 我嘗試使用eval()來執行此操作,但很快了解到eval創建的實例具有非常局部的作用域,之后便無法使用這些WebPage對象。

string_to_eval = @urls.map{|x| "webpage#{urls.index(x)} = WebPage.new('#   {x}')"}.join(';')
puts string_to_eval
eval(string_to_eval)

String_to_eval輸出:

webpage0 = WebPage.new('http://www.google.com');
webpage1 = WebPage.new('http://www.yahoo.com');
webpage2 = WebPage.new('http://www.amazon.com');
webpage3 = WebPage.new('http://www.ebay.com')

在Ruby中循環的每次迭代中我還能如何創建一個對象? 有沒有解決的辦法?

為什么不只是這個呢?

webpages = @urls.map { |url| WebPage.new(url) }

當可以擁有webpages[0]webpages[1] ...時,通常具有webpage0webpage1 ...是一個壞主意(而且,數組方式不需要eval的Evil。)

在這種情況下,我將放棄唯一的變量名,而只將結果對象保留在數組中。 在這種情況下,代碼如下所示:

>> @urls.map{|url| WebPage.new(url)}
=> [WebPage('http://www.google.com'), WebPage('http://www.yahoo.com'), WebPage('http://www.amazon.com'), WebPage('http://www.ebay.com') ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM