람다를 전달하여 집합 컬렉션에서 항목의 값을 합산하려고합니다. 내가 갖는람다가 메서드에 인수로 전달 된 인수의 수가 잘못되었습니다. 오류
# 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에서 더 좋은 방법이 있다면 알려 주시기 바랍니다.
이렇게하면, NoMethodError : 정의되지 않은 메쏘드 'lamb'for main : Object' 행의'collec.each' – Kache
'lamb [x]'와 같이 대괄호로 lambdas를 호출해야합니다. 감사! – Kache
... 또는 lamb.call (x) :) 환영합니다. – Anton