如何正确使用注入并消除错误?
我正在尝试创建一个数组。这是一个例子,我知道有更好的解决方案来获得最终结果,但是我试图更好地理解注入。
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的初始值作为参数传递。在这种情况下,初始值必须为空数组。同样,您需要确保总和是块中最后评估的行。
您需要传递初始值,因为如果不这样做,则集合的第一个值:one
会自动分配给sum
,因此sum <<
会失败(符号不支持<<
)
总而言之...如果没有默认值,:one
则求和,并且该块仅[:two, :three]
使用初始值求值,该块将对集合的每个成员求值。
a = [:one,:two,:three] # => [:one, :two, :three]
a.inject([]) do |sum, v|
sum << v if v != :one
sum
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句