【问题标题】:Scala precedence of implied dots and parentheses隐含点和括号的Scala优先级
【发布时间】:2012-09-19 08:29:56
【问题描述】:

下面的“括号”怎么写?

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 ", ")

【问题讨论】:

    标签: scala operator-precedence


    【解决方案1】:

    以字母开头的运算符的优先级最低。 + 的优先级较低,但高于 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

    【讨论】:

    • 从技术上讲,赋值运算符的优先级更低,因此它经常被 DSL 使用。
    猜你喜欢
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2012-01-27
    • 2012-12-16
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多