如何循环并使用每次迭代Ruby创建一个新对象?

tru*_*fle 0 ruby loops eval object

我看到了这个问题的几个变种,但并没有真正找到一个可靠的答案.

所以我有一系列的URL.我想循环遍历该数组,对于每个单独的URL,我将创建一个类WebPages的实例.

因此,如果数组URLS中有5个URL,那么我将创建5个WebPages对象.我尝试使用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)
Run Code Online (Sandbox Code Playgroud)

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')
Run Code Online (Sandbox Code Playgroud)

如何在Ruby中循环的每次迭代中创建一个对象?有没有解决的办法?

Ama*_*dan 5

为什么不呢?

webpages = @urls.map { |url| WebPage.new(url) }
Run Code Online (Sandbox Code Playgroud)

拥有webpage0,webpage1...当你可以拥有时webpages[0],通常是一个坏主意webpages[1]......(另外,数组方式不需要邪恶eval.)