3, ["B"] => 4, ["A", "B"] => -6ren">
gpt4 book ai didi

ruby - Lambda 作为参数传递给方法,参数数量错误错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:24:23 25 4
gpt4 key购买 nike

尝试通过传递 lambda 对一组集合中的项目值求和。我认为这只是一些语法错误:

# inputs
setCosts = {["A"] => 3, ["B"] => 4, ["A", "B"] => 5 }
collectionOfSets= [[["A"], ["B"]], [["A"], ["A", "B"]]]
# method and lambda
getSetCost = ->(x) { setCosts[x] }
def SumEachBy(collec, &lamb) # stack trace starts here
sum = 0
collec.each { |x| sum += lamb(x) }
return sum
end
# process output
collecValues = Hash[collectionOfSets.map { |set| [set, SumEachBy(set, getSetCost)] }]

我得到:

ArgumentError: wrong number of arguments (2 for 1)

我期望 collecValues 是:

{[["A"], ["B"]] => 7, [["A"], ["A", "B"]] => 8}

我的错误在哪里?

顺便说一句,如果在 Ruby 中有更好的方法来做到这一点,也请告诉我。

最佳答案

在最后一个参数之前添加 & 意味着它将绑定(bind)到与方法调用一起使用的 block ,并且您想将 lambda 作为参数传递。

只需删除它 (def SumEachBy(collec, lamb)) 并享受你的 lambda :)

关于ruby - Lambda 作为参数传递给方法,参数数量错误错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13301078/

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