在Scala中省略括号

2 methods scala implicit

我正在使用隐式类进行一些实验,并提出了以下问题.这里是:

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
}
Run Code Online (Sandbox Code Playgroud)

DEMO

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

Fab*_*ner 6

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

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

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