整数#times.collect是什么意思?

时间:2014-07-28 11:41:14

标签: ruby enumerator

我有这样的代码:

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

2 个答案:

答案 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#mapEnumerable#collect是彼此的别名。一旦你在一个集合上调用它们,它们将始终返回Array。实际上,有时您不需要去检查文档,因为您可以在 IRB 中找到它们。现在,有关示例以及如何使用此方法的工作,您可以从在线文档或使用ri寻求帮助。