gpt4 book ai didi

ruby - 枚举器相对于集合的优势

转载 作者:数据小太阳 更新时间:2023-10-29 08:31:48 24 4
gpt4 key购买 nike

我没有看到枚举器的使用。 Dave Thomas 的书是这样说的:

Enumerator allows you to capture the concept of an enumeration as an object. This allows you to store enumerations in variables, pass them as parameters, and so on.

但我也可以将数组赋值给变量,将数组作为参数传递等等。事实上,我认为对像数组这样的集合使用常规迭代器比使用枚举器更简洁:

str = "quick brown fox"
str.scan(/\w+/).each {|w| puts w }
quick
brown
fox

对比

str = "quick brown fox"
enum = str.to_enum(:scan, /\w+/)
enum.each { |w| puts w }
quick
brown
fox

枚举版本需要一个额外的步骤并产生相同的结果。什么时候使用枚举比使用迭代器的集合更实用?

最佳答案

使用枚举器可以实现一些数组不允许的事情。

枚举器可以表示延迟计算的序列,这意味着生成元素的代码在需要该元素之前不会运行。

这意味着枚举器可以表示无限序列。例如:

e = Enumerator.new { |y| s = 'a'; loop { y << s = s.succ } }
e.first(5) # => ["b", "c", "d", "e", "f"]

此示例显示了一个无限序列,这意味着它必须延迟计算,因为您的计算机是有限的。但即使您不使用无限序列,惰性求值仍然可以非常有助于节省 CPU 时间。

此外,Enumerator 可以用作外部迭代器,这为您的使用方式提供了各种灵 active 。 (有关示例,请参见 7stud 的回答。)

关于ruby - 枚举器相对于集合的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26291694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com