2012-09-27 22 views
3

以下「括號內」是如何表示的?隱含圓點和圓括號的Scala優先級

val words = List("foo", "bar", "baz") 
val phrase = "These are upper case: " + words map { _.toUpperCase } mkString ", " 

是不是一樣

val words = List("foo", "bar", "baz") 
val phrase = "These are upper case: " + words.map(_.toUpperCase).mkString(", ") 

換句話說,做暗示點(「」)和括號具有相同的優先級以假亂真?

是第一個版本一樣

val words = List("foo", "bar", "baz") 
val phrase = 
    "These are upper case: " + (words map { _.toUpperCase } mkString ", ") 

回答

4

運營商開始以字母有最低優先級。 +具有低優先級,但高於mapmkString。所以

"These are upper case: " + words map { _.toUpperCase } mkString ", " 

應該被解析爲:

(("These are upper case: " + words).map{ _.toUpperCase }).mkString(", ") 

認爲它是:

v1 + v2 map v3 mkString v4 
((v1 + v2) map v3) mkString v4 

看到我更多的信息對方回答:When to use parenthesis in Scala infix notation

+2

從技術上來講,賦值運算符有甚至更低的優先級,所以它經常被DSL使用。 –