隐含点和括号的Scala优先级

隐含点和括号的Scala优先级,scala,operator-precedence,Scala,Operator Precedence,下面的“括号”是什么意思 和你的一样吗 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 } mk

下面的“括号”是什么意思

和你的一样吗

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(", ")
val words = List("foo", "bar", "baz")
val phrase =
  "These are upper case: " + (words map { _.toUpperCase } mkString ", ")

以字母开头的运算符优先级最低<代码>+的优先级较低,但高于
map
mkString
。所以

"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

有关更多信息,请参见我的另一个答案:

从技术上讲,赋值运算符的优先级更低,因此DSL经常使用它。