При программировании на 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) я могу использовать функцию карты.
Почему в этом конкретном случае нужны скобки? Есть ли общие рекомендации о том, когда и зачем вам это нужно?