2013-03-20 33 views
2
class TestClass 
    attr_accessor :name, :id 
end 


values = ["test1", "test2"] 

mapped_values = values.map{|value| 
    test_class = TestClass.new 
    test_class.name = value 
    test_class.id = #some random number 
    return test_class 
} 

puts mapped_values 

显然这不起作用,它只会返回第一个值而不是新构建的整个列表。 我有这个测试脚本,我想要实现的是它从Array.map操作返回值名称和ID的TestClass的列表。我只是想在Ruby中找到最好的方法。如何在ruby Array Map中构造一个对象?

我可以做这样的事情

tests = [] 

values.each do |value| 
    test_class = TestClass.new 
    test_class.name = value 
    test_class.id = #some random number 
    tests << test_class 
end 

我相信一定有这样做的更好的办法?

+0

您的底部示例*非常容易阅读和理解。 – slhck 2013-03-20 09:56:55

回答

3

如果您想使用地图,请删除回电。

mapped_values = values.map{|value| 
    test_class = TestClass.new 
    test_class.name = value 
    test_class.id = #some random number 
    test_class 
} 

传递的块是Proc,Proc不允许显式返回调用。请参阅Why does explicit return make a difference in a Proc?以获取更多信息

+1

Upvoted,但是IMO应该解释为什么'return'不起作用。 – 2013-03-20 10:13:25

+0

更新了我的答案。 Thnx – 2013-03-20 10:21:53

+0

我相信你*可以*使用'break return_val'显式地返回一个块的值。简单的'return'从整个方法返回。 – 2013-03-20 11:52:05