Плюс не работающий в Scala переводчик - PullRequest
3 голосов
/ 01 декабря 2011

Я пытаюсь суммировать список, используя fold в интерпретаторе Scala, но он продолжает давать мне странную ошибку.Когда я наберу это:

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

Я ожидаю получить 6.Однако, переводчик говорит:

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

Если я определю свою собственную функцию

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

и вызову

(list :\ 0)(plus)

Я действительно получу 6.

Я уверен, что мне здесь не хватает чего-то очень простого, но я не могу понять это, поэтому любая помощь очень ценится.

Ответы [ 2 ]

10 голосов
/ 01 декабря 2011

Оператор плюс сам по себе не является функцией, он является символом и не имеет типа.То, что вы ищете, это:

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

_ + _ является сокращением для анонимной функции, которая принимает два параметра и вызывает метод + для первого параметра, передаваемого во втором.

3 голосов
/ 01 декабря 2011

Попробуйте это:

(list :\ 0)(_ + _)

Вам нужно использовать подстановочные знаки, чтобы показать компилятору Scala, что вы хотите вызвать метод "+" для первого аргумента, вместо использования Tuple2 в качестве аргумента самой функции.

...