在Scala中省略括号

时间:2016-11-19 10:04:39

标签: scala methods 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
}

DEMO

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

1 个答案:

答案 0 :(得分:6)

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

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

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