[1,2,3]与[1,2,3]之间的差异。Ruby中的枚举

[1,2,3]与[1,2,3]之间的差异。Ruby中的枚举,ruby,enumeration,enumerable,Ruby,Enumeration,Enumerable,在Ruby中,我试图理解to_enum和enum\u for方法之间的区别。在我提问之前,我已经提供了一些示例代码和两个示例来帮助w/context 示例代码: 在示例2中,枚举数是通过调用数组[1,2,3]上的to_enum方法生成的 问题: 在示例1和2中生成的枚举数的行为是否有所不同?我可以从检查的输出中看出,它们显示的标签略有不同,但我可以在枚举数的行为中找到任何差异 # Output for example #1 #<Enumerator: [1, 2, 3]:each>

在Ruby中,我试图理解
to_enum
enum\u for
方法之间的区别。在我提问之前,我已经提供了一些示例代码和两个示例来帮助w/context

示例代码: 在示例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"
#例如输出#1
##标签上写着:“每个”
#输出例如#2
##标签上写着:“分组2”
现在,假设您拥有数组
[1,2,3]
,并且希望为数组创建一个枚举器。数组有each()方法,但不是用each()创建枚举数,后者将返回数组中的每个元素,然后结束;是否要创建一个枚举数,该枚举数在到达数组末尾后从数组的开头重新开始

e = [1, 2, 3].to_enum(:cycle)

10.times do
  puts e.next()
end

--output:--
1
2
3
1
2
3
1
2
3
1

@谢谢。只是想确保我没有遗漏一些东西。@amorphid,ruby文档曾经很好地说,“这个方法是方法a的同义词。请参阅方法a的描述。”我宁愿看到引用,也不愿看到重复的描述。我刚刚重读了你的示例,刚刚意识到你也可以做
[1,2,3]。to_enum(:foo)
,返回
#
。如果我意识到这一点,我的问题只会是=>命令
[1,2,3]中的符号是否用于枚举(:foo)
,而不是将输出中的
:each
替换为
:foo
?“他们对此只字不提,至少我看不见。”阿莫菲德,我编辑我的帖子是为了回答你的后续问题。谢谢。这正是我一直在寻找的答案!我花了一点时间才弄明白如何提问:)
irb (main)> puts [1,2,3].to_enum.inspect
=> #<Enumerator: [1, 2, 3]:each> 
# 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"
p [1, 2, 3].to_enum
p [1, 2, 3].enum_for

--output:--

#<Enumerator: [1, 2, 3]:each>
#<Enumerator: [1, 2, 3]:each>
str = "hello\world"
e = str.to_enum
puts e.next

--output:--
1.rb:3:in `next': undefined method `each' for "helloworld":String (NoMethodError)
    from 1.rb:3:in `<main>
str = "hello\nworld"
e = str.to_enum(:each_line)
puts e.next

--output:--
hello
e = [1, 2, 3].to_enum(:cycle)

10.times do
  puts e.next()
end

--output:--
1
2
3
1
2
3
1
2
3
1