在Ruby中,这两个枚举器之间是否存在功能差异?
irb> enum_map = [1,2,3].map
=> #<Enumerator: [1, 2, 3]:map> # ends with "map>"
irb> enum_group_by = [1,2,3].group_by
=> #<Enumerator: [1, 2, 3]:group_by> # ends with "group_by>"
irb> enum_map.methods == enum_group_by.methods
=> true # they have the same methods
#<Enumerator: [1, 2, 3]:map>
可以<Enumerator: [1, 2, 3]:group_by>
做什么,反之亦然?
谢谢!
答案 0 :(得分:3)
来自group_by
的文档:
按块的结果对集合进行分组。返回一个哈希值 keys是块的评估结果,值是数组 集合中与密钥对应的元素。
如果没有给出阻止,则返回枚举数。
(1..6).group_by { |i| i%3 } #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]}
来自map
的文档:
返回一个新数组,其中包含每次运行块一次的结果 枚举中的元素。
如果没有给出阻止,则返回枚举器。
(1..4).map { |i| i*i } #=> [1, 4, 9, 16] (1..4).collect { "cat" } #=> ["cat", "cat", "cat", "cat"]
正如您所看到的,每个人都做了不同的事情,这有不同的目的。得出结论,两个API是相同的,因为它们暴露相同的接口似乎错过了面向对象编程的全部目的 - 不同的服务假设暴露相同的接口以启用polymorphism。
答案 1 :(得分:2)
他们所做的事情有所不同,但从根本上说,他们都属于同一类:Enumerator
。
当它们被使用时,枚举器发出的值会有所不同,但它们的接口是相同的。
同一类的两个对象通常具有相同的方法。可以使用其他方法扩充实例,但通常不会这样做。