Enumerable
有first
:
(3..5).to_enum.first
# => 3
Run Code Online (Sandbox Code Playgroud)
但它没有last
:
(3..5).to_enum.last
# => NoMethodError: undefined method `last' for #<Enumerator: 3..5:each>
Run Code Online (Sandbox Code Playgroud)
这是为什么?
Bro*_*tse 13
这是因为并非所有可枚举对象都具有最后一个元素.
最简单的例子是:
[1, 2, 3].cycle
# (an example of what cycle does)
[1,2,3].cycle.first(9) #=> [1, 2, 3, 1, 2, 3, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
即使枚举器元素是有限的,也没有简单的方法来获取最后一个元素而不是迭代它到最后,这将是非常低效的.
因为并非所有Enumerable
元素都具有最后一个元素,这可能会也可能不会,因为它不Enumerable
包含任何元素.
请考虑以下事项Enumerable
:
a = Enumerator.new do |yielder|
while true
yielder << 1
end
end
Run Code Online (Sandbox Code Playgroud)
这是无限的Enumerable
.
Enumerable
是一种迭代元素序列的机制.对于某些迭代过程,这可能只执行一次.为了获得最后一个元素(如果实际存在一个元素),它必须评估整个迭代过程并获得最后一个元素.之后,Enumerable
无效.
归档时间: |
|
查看次数: |
1379 次 |
最近记录: |