gpt4 book ai didi

ruby - enum#with_object 与 enum#each_with_object 有何不同?

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

文档说:

enum#each_with_object
:-

Iterates the given block for each element with an arbitrary object, obj, and returns obj

enum#with_object:-

Iterates the given block for each element with an arbitrary object, obj, and returns obj

但是,当我在两种结构上尝试以下操作时,一个结构给出了预期的输出,但其他结构没有。所以我怀疑这两种构造之间存在差异。

使用each_with_object

%w(foo bar).each_with_object({}) { |str, hsh| hsh[str] = str.upcase }
=> {"foo"=>"FOO", "bar"=>"BAR"}

这里成功了!

使用with_object

%w(foo bar).with_object({}) { |str, hsh| hsh[str] = str.upcase }
=> NoMethodError: undefined method `with_object' for ["foo", "bar"]:Array
from (irb):1
from C:/Ruby193/bin/irb:12:in `<main>'

这里失败了!

那么这两种方式有什么区别呢?

最佳答案

每个 返回一个 Enumerator 对象。

%w(foo bar).each.class
=> Enumerator

因此,对于第一种情况,数组将首先转换为 Enumerator,然后作用于 with_object

如果您希望第二种情况有效,您必须将数组转换为 Enumerator。您可以使用 .to_enum.each.map 来转换数组。

%w(foo bar).map.with_object({}) { |str, hsh| hsh[str] = str.upcase }
=> {"foo"=>"FOO", "bar"=>"BAR"}

更多详情:Enumerator

关于ruby - enum#with_object 与 enum#each_with_object 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671881/

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