Ruby 如何通过循环在每次迭代中创建一个新对象?
我看到了这个问题的几个变体,但并没有真正找到一个可靠的答案 所以我有一个URL数组。我想循环遍历该数组,并为每个单独的URL创建一个类WebPages的实例 因此,如果数组URL中有5个URL,那么我将创建5个网页对象。我尝试使用eval()来实现这一点,但很快就了解到eval生成的实例具有非常局部的作用域,之后我无法使用这些网页对象Ruby 如何通过循环在每次迭代中创建一个新对象?,ruby,loops,object,eval,Ruby,Loops,Object,Eval,我看到了这个问题的几个变体,但并没有真正找到一个可靠的答案 所以我有一个URL数组。我想循环遍历该数组,并为每个单独的URL创建一个类WebPages的实例 因此,如果数组URL中有5个URL,那么我将创建5个网页对象。我尝试使用eval()来实现这一点,但很快就了解到eval生成的实例具有非常局部的作用域,之后我无法使用这些网页对象 string_to_eval = @urls.map{|x| "webpage#{urls.index(x)} = WebPage.new('# {x}')"
string_to_eval = @urls.map{|x| "webpage#{urls.index(x)} = WebPage.new('# {x}')"}.join(';')
puts string_to_eval
eval(string_to_eval)
字符串\u to \u 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) }
一般来说,让
webpage0
,webpage1
。。。当您可以拥有网页[0]
,网页[1]
。。。(另外,数组方式不需要使用eval
的邪恶)在这种情况下,我将放弃唯一的变量名,而只是将结果对象留在数组中。在这种情况下,代码如下所示:
>> @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') ]