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中循环的每次迭代中创建一个对象?有没有解决的办法?
为什么不呢?
webpages = @urls.map { |url| WebPage.new(url) }
Run Code Online (Sandbox Code Playgroud)
拥有webpage0,webpage1...当你可以拥有时webpages[0],通常是一个坏主意webpages[1]......(另外,数组方式不需要邪恶eval.)