作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我没有看到枚举器的使用。 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/
我是一名优秀的程序员,十分优秀!