在 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)我可以使用 map 函数。
为什么这种特殊情况需要括号?是否有关于何时以及为什么需要它的一般指导方针?