如何在ruby Array Map中构造对象?

时间:2013-03-20 09:54:27

标签: ruby performance coding-style

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操作返回其中包含值name和id的TestClass列表。我只是想在Ruby中找到最好的方法。

我可以做这样的事情

tests = []

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

我相信一定有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

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

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

传递的块是Proc和Procs不允许显式返回调用。有关详细信息,请参阅Why does explicit return make a difference in a Proc?