我正在使用隐式类进行一些实验,并提出了以下问题。这是:
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
}
不使用-->
方法编译示例的原因是什么?我认为-->
是Scala
中完全有效的标识符...与任何其他标识符一样。
答案 0 :(得分:6)
Scala中运算符的优先级取决于其名称的第一个符号/字符,如此处所述1,优先顺序为
|
^
&
=
!
<
>
:
+
-
*
/
%
这就是为什么"STR" extractInt 10 createArray 11
被解析为("STR" extractInt 10) createArray 11
而"STR" extractInt 10 --> 11
被解析为"STR" extractInt (10 --> 11)
然后产生编译错误的原因。