gpt4 book ai didi

arrays - 注入(inject) : NoMethodError: undefined method `<<' for :one:Symbol

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:32 26 4
gpt4 key购买 nike

如何正确使用注入(inject)并消除我的错误?

我正在尝试创建一个数组。这是一个例子,我知道有更好的解决方案来获得最终结果,但我试图更好地理解注入(inject)。

a = [:one,:two,:three]  # => [:one, :two, :three]

a.inject do |sum = [], v| # => [:one, :two, :three]
sum << v if v != :one # ~> NoMethodError: undefined method `<<' for :one:Symbol\nDid you mean? <
end

目的是添加名为 sum 的数组的项目,该数组以空数组开始,如果项目不等于 :one,则添加项目。

最佳答案

您可以将 sum 的初始值作为参数传递。在这种情况下,初始值需要是一个空数组。同样,您需要确保 sum 是 block 中最后计算的行。

你需要传递一个初始值,因为如果你不这样做,集合的第一个值 :one自动分配给 sum , 所以 sum <<将失败(符号不支持 << )

总结...如果没有默认值,:one分配给 sum 并且该 block 仅评估 [:two, :three]该 block 使用初始值评估集合中的每个成员。

a = [:one,:two,:three]  # => [:one, :two, :three]

a.inject([]) do |sum, v|
sum << v if v != :one
sum
end

关于arrays - 注入(inject) : NoMethodError: undefined method `<<' for :one:Symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58027846/

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