[英]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]
...時,通常具有webpage0
, webpage1
...是一個壞主意(而且,數組方式不需要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.