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 は明らかに、マップ関数を使用できる (暗黙的な変換による) 文字列を返します。
この特定のケースに括弧が必要なのはなぜですか? いつ、なぜそれが必要なのかについての一般的なガイドラインはありますか?