gpt4 book ai didi

ruby - 如何获取克隆的惰性枚举器的大小

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:30 28 4
gpt4 key购买 nike

我们有一个 Enumerator::Lazy 对象

a = [1,2,3].lazy.map {} #=> <Enumerator::Lazy: #<Enumerator::Lazy: [1, 2, 3]>:map>
a.size #=> 3
a.clone.size #=> nil

有人对这种行为有正确的解释吗?我知道 size 返回枚举器的大小,如果不能延迟计算则返回 nil。当我们克隆对象时它返回

a.clone #=> <Enumerator::Lazy:<Enumerator::Generator:0x00007fdaa80218d8>:each>

最佳答案

I know that size returns size of the enumerator, or nil if it can’t be calculated lazily.

size对于 Enumerator不一定是真实的东西(或者至少不是人们认为的那样),这可能是实现此更改的原因。

例如

[1,2,3].to_enum.size
#=> nil

[1,2,3].to_enum(:each) { 1 }.size #=> 1
#=> 1

或者更好

[1,2,3].to_enum(:each) { "A" }.size 
#=> "A"

When we clone object it returns a.clone #=> <Enumerator::Lazy<Enumerator::Generator:0x00007fdaa80218d8>:each>

这似乎是 2.4 中的一个更改,它似乎恢复到 :each 方法(可能通过 enum_for ),因为在 2.3 中对 map 的引用保留大小。显然,由于回滚,没有发生迭代,并且无法以“惰性”方式确定大小,因此 nil

关于ruby - 如何获取克隆的惰性枚举器的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47578649/

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