2013-03-20 35 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