ラムダを渡して、セットのコレクション内のアイテムの値を合計しようとしています。これは単なる構文エラーだと思います:
# 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 でこれを行うより良い方法があれば、それも教えてください。