【发布时间】:2011-08-01 08:21:22
【问题描述】:
在使用 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 函数。
为什么这种特殊情况需要括号?是否有关于何时以及为何需要它的一般准则?
【问题讨论】:
标签: scala dictionary functional-programming parentheses infix-notation