Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何通过循环在每次迭代中创建一个新对象?_Ruby_Loops_Object_Eval - Fatal编程技术网

Ruby 如何通过循环在每次迭代中创建一个新对象?

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}')"

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

所以我有一个URL数组。我想循环遍历该数组,并为每个单独的URL创建一个类WebPages的实例

因此,如果数组URL中有5个URL,那么我将创建5个网页对象。我尝试使用eval()来实现这一点,但很快就了解到eval生成的实例具有非常局部的作用域,之后我无法使用这些网页对象

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') ]