如何找到隐式转换类中定义的方法/操作的定义?

Ada*_*ler 7 scala

我在看别人的源代码(Scala),我看到在IndexedSeq:+=类型的变量上调用运算符.我正在查看该类的scaladocs页面以找出该运算符的作用,但我没有看到它.我想它要么在继承层次结构之外的类中定义,要么scaladocs页面上的javascript隐藏在某个我无法看到它的地方.(实际上它既不是;见下面的答案.)IndexedSeq

我点击scaladocs页面上的每个按钮试图取消隐藏所有内容.我查看了网页的HTML代码.必须有一种方法可以从可以应用它的类的文档中查找运算符.不是吗?

(注意:我使用symbolhound查找了该运算符,所以我知道该运算符现在意味着什么.这个问题一般是关于scala文档,而不是那个特定的运算符.)

gou*_*ama 9

Scala中的所有运算符都是常规方法.

您无法找到它,因为它是重新分配的编译器魔法,它不是运算符.或者换句话说:它看起来像是一个自己的运算符,但实际上它是"一个运算符后跟=字符".

如果运算符(此处:+)返回正确的类型,并且原始值var显然为a ,则编译器会将其神奇地转换为赋值.

由于它不是由任何隐式或显式方法提供的Seq[T],因此它不会出现在生成的scaladoc中的任何位置.

所以回答一般问题:

  • 它是一种语言结构,所以记录它的唯一地方是规范,遗憾的是,
  • 但是,如果你在"<?>="某个地方找到了一些未知的运算符,那么找"<?>"一个肯定会记录的定义.

编辑:我终于找到了SLS中定义的位置:

§6.12.4:

赋值运算符是一个运算符符号((§1.1)中的语法类别op),以等号"="结尾,但运算符除外,其中包含下列条件之一:

(1)运算符也以等号开头,或者

(2)运算符是(<=),(> =),(!=)之一.

它后来也说它只会在所有其他选项都被尝试时发生(包括潜在的暗示).