gpt4 book ai didi

ruby - each_with_object 应该如何工作?

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

我正在尝试弄清楚应该如何使用 each_with_object

我有一个不起作用的求和示例:

> (1..3).each_with_object(0) {|i,sum| sum+=i}
=> 0

我假设结果是 6 !我的错误在哪里?

最佳答案

each_with_object不适用于整数等不可变对象(immutable对象)。

(1..3).each_with_object(0) {|i,sum| sum += i} #=> 0

这是因为each_with_object迭代一个集合,将每个元素和给定的对象传递给 block 。它不会在每次迭代后更新对象的值并返回原始给定的对象。

它可以与散列一起使用,因为更改散列键的值会自行更改原始对象的散列值。

(1..3).each_with_object({:sum => 0}) {|i,hsh| hsh[:sum] += i}
#=> {:sum => 6}

String对象是有趣的案例。它们是可变的,因此您可能会期望以下内容返回“abc”

("a".."c").each_with_object("") {|i,str| str += i} # => ""

但事实并非如此。这是因为 str += "a"返回一个新对象,原始对象保持不变。但是如果我们这样做

("a".."c").each_with_object("") {|i,str| str << i} # => "abc"

之所以有效,是因为 str << "a"修改原始对象。

有关更多信息,请参阅 each_with_object 的 ruby​​ 文档

为了您的目的,请使用 inject

(1..3).inject(0) {|sum,i| sum += i} #=> 6
# or
(1..3).inject(:+) #=> 6

关于ruby - each_with_object 应该如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19064209/

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