我有这样的代码:
users = [ a, b ]
users += 10.times.collect do |i|
name = "user_#{i}"
user = User.create(name: name)
end
10.times
似乎返回Enumerator
个对象。但是,collect
方法未显示在ruby-doc Enumerator中,但显示在ruby-doc Array中。在ruby-doc Array中,它说collect
返回new_ary
。如何将new_ary
添加到users
?
答案 0 :(得分:3)
它实际上是来自Enumerable的方法,Enumerator
中包含的模块。collect
充当map
函数,您为其提供了一个块并且结果保存在Enumerable
集合中的每个项目的数组中。10.times
返回一个Enumerble
对象,其数字从0到10(不包括在内)。
答案 1 :(得分:0)
在这些情况下,总是进行一些self
内省。我这样做;这就是我要求你也这样做的原因。让我们看看如何找到所有连接:
[4] pry(main)> enum = 10.times
=> #<Enumerator: ...>
[5] pry(main)> enum.class
=> Enumerator
[6] pry(main)> enum.class.included_modules
=> [Enumerable, Kernel]
[7] pry(main)> enum.method(:collect).owner
=> Enumerable
现在,Enumerable#map
和Enumerable#collect
是彼此的别名。一旦你在一个集合上调用它们,它们将始终返回Array
。实际上,有时您不需要去检查文档,因为您可以在 IRB 中找到它们。现在,有关示例以及如何使用此方法的工作,您可以从在线文档或使用ri
寻求帮助。