Когда использовать скобки в инфиксной нотации Scala

При программировании на Scala, Я делаю все больше и больше функциональных вещей. Однако при использовании инфиксной нотации трудно сказать, когда вам нужны скобки, а когда нет.

Например, следующий фрагмент кода:

def caesar(k:Int)(c:Char) = c match {
    case c if c isLower => ('a'+((c-'a'+k)%26)).toChar
    case c if c isUpper => ('A'+((c-'A'+k)%26)).toChar
    case _ => c
}

def encrypt(file:String,k:Int) = (fromFile(file) mkString) map caesar(k)_

Для (fromFile (file) mkString) скобки нужны для компиляции . При удалении я получаю следующую ошибку:

Caesar.scala:24: error: not found: value map
    def encrypt(file:String,k:Int) = fromFile(file) mkString map caesar(k)_
                                                                 ^
one error found

mkString, очевидно, возвращает строку, для которой (посредством неявного преобразования AFAIK) я могу использовать функцию карты.

Почему в этом конкретном случае нужны скобки? Есть ли общие рекомендации о том, когда и зачем вам это нужно?

15
задан Chris Martin 25 April 2016 в 12:33
поделиться