相关疑难解决方法(0)

何时在Scala中缀表示法中使用括号

在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

15
推荐指数
2
解决办法
3882
查看次数