在 Scala 中省略括号

Omiting parenthesis in Scala

我 运行 进行了一些隐式 类 的实验,并提出了以下问题。这是:

object Main extends App {
  implicit class IntExtractor(str: String){
    def extractInt(i: Int): Int = i + str.##
  }

  implicit class ArrayCreator(i: Int){
    def -->(ii: Int): Array[Int] = Array[Int](i, ii)
    def createArray(ii: Int): Array[Int] = Array[Int](i, ii) 
  }

  "STR" extractInt 10 createArray 11   //fine
  ("STR" extractInt 10) --> 11         //fine
  "STR" extractInt 10 --> 11           //compile-error
}

DEMO

没有用-->方法编译示例的原因是什么?我认为 -->Scala 中是一个完全有效的标识符...就像任何其他标识符一样。

Scala 中运算符的优先级取决于其名称的第一个 symbol/character,如此处所述 1,优先级顺序为

  • (所有字母)
  • |
  • ^
  • &
  • = !
  • < >
  • :
  • + -
  • * / %
  • (所有其他特殊字符)

这就是为什么 "STR" extractInt 10 createArray 11 被解析为 ("STR" extractInt 10) createArray 11"STR" extractInt 10 --> 11 被解析为 "STR" extractInt (10 --> 11) 然后产生编译错误的原因。