【发布时间】:2014-07-14 01:32:40
【问题描述】:
在 Ruby 中,我试图了解 to_enum 和 enum_for 方法之间的关系。在我提出问题之前,我已经提供了一些示例代码和两个示例来帮助了解上下文。
示例代码:
# replicates group_by method on Array class
class Array
def group_by2(&input_block)
return self.enum_for(:group_by2) unless block_given?
hash = Hash.new {|h, k| h[k] = [] }
self.each { |e| hash[ input_block.call(e) ] << e }
hash
end
end
示例#1:
irb (main)> puts [1,2,3].group_by2.inspect
=> #<Enumerator: [1, 2, 3]:group_by2>
在示例 #1 中:在数组 [1,2,3] 上调用 group_by,而不传入块,返回使用命令 self.enum_for(:group_by_2) 生成的枚举器。
示例 #2
irb (main)> puts [1,2,3].to_enum.inspect
=> #<Enumerator: [1, 2, 3]:each>
在示例 #2 中,枚举数是通过在数组 [1,2,3] 上调用 to_enum 方法生成的
问题:
在示例 1 和 2 中生成的枚举器是否以任何方式表现不同?我可以从检查的输出中看到它们显示的标签略有不同,但我可以发现枚举器的行为有任何差异。
# Output for example #1
#<Enumerator: [1, 2, 3]:each> # label reads ":each"
# Output for example #2
#<Enumerator: [1, 2, 3]:group_by2> # label reads ":group_by2"
【问题讨论】:
标签: ruby enumeration enumerable