ruby中可枚举方法和迭代器方法的区别
我正在学习ruby 我想知道ruby中可枚举方法和迭代器方法之间的区别,以及我们为什么使用枚举器方法 在我看来,两者都一样 我想知道两者的区别 正规迭代器法ruby中可枚举方法和迭代器方法的区别,ruby,Ruby,我正在学习ruby 我想知道ruby中可枚举方法和迭代器方法之间的区别,以及我们为什么使用枚举器方法 在我看来,两者都一样 我想知道两者的区别 正规迭代器法 3.times do |x| puts x end 使用每个枚举器 enumerator = 3.times enumerator.each do |x| puts x end 也适用于字符串 "scriptkiddie".each_char{|x| puts x} 使用枚举器对象 "scriptkiddie".enum_for(:e
3.times do
|x| puts x
end
使用每个枚举器
enumerator = 3.times
enumerator.each do
|x| puts x
end
也适用于字符串
"scriptkiddie".each_char{|x| puts x}
使用枚举器对象
"scriptkiddie".enum_for(:each_char).each{|x| puts x}
使用枚举器的好处是什么。我应该在哪里使用枚举器
请帮助我理解差异回答您的原始问题
是的,“迭代器”在未使用块时返回一个值
但是,如果您只是在学习Ruby,并且想要在数组/范围/哈希上迭代,只需知道使用每个将涵盖您的大多数情况:
[1, 2, 3].each do |element|
puts element
end
# 1
# 2
# 3
('a'..'e').each do |element|
puts element
end
# a
# b
# c
# d
# e
{'a' => 1, 'b' => 2}.each do |key, value|
puts key
puts value
end
# a
# 1
# b
# 2
在您的级别上,您不必关心这些方法是在哪里定义的,对于哪个类或模块,或者如何调用它们
最后,不应该在Ruby中使用,因为它们可以显示奇怪的行为
你最新的问题
你把问题说得更清楚了,这很好。请注意,更改可能会被忽略,特别是如果您已经接受了答案
3.5倍
像这样使用,两者完全相同。由于第二个变量更为详细,并且枚举器可能没有在其他任何地方使用,因此没有理由使用第二个变量<代码>枚举数
的长度大于3。但次数仍为:)
请注意,| x |
应与块开始位于同一行。我可以帮你
每个字符
同样,如果您所做的只是创建一个枚举数并直接对其调用每个
,则没有理由使用第二个变量
为什么使用枚举器?
链接方法
使用枚举器的一个原因是能够链接方法:
puts 3.times.cycle.first(7)
#=> [0, 1, 2, 0, 1, 2, 0]
或
无限列表
枚举数还可以处理无限列表
require 'prime'
every_prime = Prime.each
p every_prime.first(20)
#=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]
p every_prime.lazy.select{|x| x > 1000}.first(3)
#=> [1009, 1013, 1019]
自定义迭代
可以为自定义迭代定义新的枚举数:
require 'date'
def future_working_days(start_date = Date.today)
date = start_date
Enumerator.new do |yielder|
loop do
date += 1
yielder << date unless date.saturday? || date.sunday?
end
end
end
puts future_working_days.take(3)
# 2017-02-01
# 2017-02-02
# 2017-02-03
需要“日期”
def未来工作日(开始日期=日期。今天)
日期=开始日期
Enumerator.new do | yielder|
环道
日期+=1
伊埃尔德你到底在说什么方法?你的意思是吗?@tadman请告诉我枚举器和iterator@EricDuminil请告诉我枚举器和迭代器之间的区别。区别是-其中之一存在。从技术上讲,这是一个枚举器
,其中一个祖先是可枚举的@scriptkiddie1 Ruby中没有“迭代器”类。迭代器只是一个概念,枚举器是一个概念的实现。@tadman谢谢你,兄弟,我认为迭代器是一个类,每个类。。迭代器的方法是否“在您的级别”-答案不应该只针对OPs级别,Stackoverflow是所有程序员的参考书,google为这个问题提供了帮助。这个答案并没有解释这两种方法之间的权衡,也没有给出一个使用枚举器的理由的例子。很好的答案。超越一切!
puts 3.times.cycle.first(7)
#=> [0, 1, 2, 0, 1, 2, 0]
"script".each_char.with_index{|c, i|
puts "letter #{i} : #{c}"
}
# letter 0 : s
# letter 1 : c
# letter 2 : r
# letter 3 : i
# letter 4 : p
# letter 5 : t
require 'prime'
every_prime = Prime.each
p every_prime.first(20)
#=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]
p every_prime.lazy.select{|x| x > 1000}.first(3)
#=> [1009, 1013, 1019]
require 'date'
def future_working_days(start_date = Date.today)
date = start_date
Enumerator.new do |yielder|
loop do
date += 1
yielder << date unless date.saturday? || date.sunday?
end
end
end
puts future_working_days.take(3)
# 2017-02-01
# 2017-02-02
# 2017-02-03