Синтаксис беспорядочного вызова Scala с функцией карри - PullRequest
1 голос
/ 27 октября 2010

Примечание: подробный ответ на более общую проблему находится в вопросе переполнения стека Каковы точные правила, когда можно опустить скобки, точки, фигурные скобки, = (функции) и т. Д. *.

Следующие работы:

scala> List(1,2,3) filter (_ > 1) reduceLeft(_ + _)
res65: Int = 5

А также следующее:

scala> List(1,2,3).filter(_ > 1).foldLeft(0)(_ + _)
res67: Int = 5

Но не этот синтаксис:

scala> List(1,2,3) filter (_ > 1) foldLeft(0)(_ + _)
<console>:10: error: 0 of type Int(0) does not take parameters
       List(1,2,3) filter (_ > 1) foldLeft(0)(_ + _)
                                        ^

Что такое предлагаемое исправление?

Ответы [ 2 ]

7 голосов
/ 27 октября 2010

Эта тема хорошо описана в вопросе переполнения стека Каковы точные правила, когда можно опустить скобки, точки, фигурные скобки, = (функции) и т. Д .?.

Curried функции кажутся немного сложнее, чем методы с одним параметром. Чтобы опустить точку, функции с карри должны использовать скобки вне вызова инфикса.

Как Маримуту Мадасами упоминал , это работает (объект (Список), метод (foldLeft) и его первый параметр (0) в скобках):

(List(1,2,3) filter (_ > 1) foldLeft 0) (_ + _)
4 голосов
/ 27 октября 2010

Это работает:

(List(1,2,3) filter (_ > 1) foldLeft 0) (_ + _)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...