在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)_
Run Code Online (Sandbox Code Playgroud)
(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
Run Code Online (Sandbox Code Playgroud)
mkString显然返回一个字符串,在其上(通过隐式转换AFAIK)我可以使用map函数.
为什么这个特殊情况需要括号?关于何时以及为何需要它,是否有一般指导原则?
dictionary functional-programming scala infix-notation parentheses