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