2011-12-01 3 views
3

Scala 인터프리터에서 fold를 사용하여 목록을 합산하려고하지만 이상한 오류가 계속 발생합니다. 나는이를 입력 할 때 :Plus가 Scala 인터프리터에서 작동하지 않습니다.

val list = List(1,2,3) 
(list :\ 0)(+) 

을 나는 6를 얻을 것으로 기대합니다. 난 내 자신의 기능을

def plus(a: Int, b: Int) = a+b 

을 정의하고 6를 얻을 내가 실제로 할

(list :\ 0)(plus) 

를 호출하는 경우 그러나, 인터프리터는

error: illegal start of simple expression 
(list :\ 0)(+) 
      ^

을 말한다.

나는 여기에서 정말 간단한 것을 놓치고있을 것이라고 확신하지만, 그것을 이해할 수는 없으므로 어떤 도움을 주시면 감사하겠습니다.

답변

10

더하기 연산자 자체는 기호가 아니며 형식이없는 함수가 아닙니다. 당신이 찾고있는 무슨 다음

val list = List(1,2,3) 
(list :\ 0)(_+_) 

두 개의 매개 변수를 두 번째 전달 첫 번째 매개 변수에 + 메서드를 호출하는 익명 함수에 대한 _ + _입니다 속기이다.

+0

고맙습니다. 이제 작동합니다. :) – astay13

3

이 시도 :

(list :\ 0)(_ + _) 

당신은 당신이에 인수로 Tuple2을 사용하는 대신 인수의 첫 번째에있는 "+"메소드를 호출 할 스칼라 컴파일러를 표시하기 위해 와일드 카드를 사용할 필요가 기능 자체.

+3

무슨 Tuple2? ... –

+0

죄송합니다, 틀렸어요. 오히려 위에 정의 된'plus' 메소드는 foldLeft에 의해 호출되는 apply 메소드를 갖는 Function2입니다. 한편,'+'연산자는 Int 클래스에서 메서드로 정의되므로, 우리는 Scala 컴파일러에게'+'메서드를 호출 할 객체를 선언해야합니다. – Aaron

관련 문제