gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:08:10 25 4
gpt4 key购买 nike

我在看别人的源代码(Scala),在那里我看到了操作符 :+=被类型为 IndexedSeq 的变量调用.我正在查看该类的所有 scaladocs 页面以找出该运算符的作用,但我没有看到它。我认为它要么是在 IndexedSeq 之外的类中定义的的继承层次结构,否则 scaladocs 页面上的 javascript 将它隐藏在我看不到的地方。 (实际上两者都不是;请参阅下面的答案。)

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

(注意:我使用 symbolhound 查找了那个运算符,所以我现在知道那个运算符的含义了。这个问题一般是关于 Scala 文档的,而不是那个特定的运算符。)

最佳答案

Scala 中的所有运算符都是普通方法。

你找不到它,因为它是 编译器魔术对于重新分配,它不是运算符。或者换一种说法:它看起来像一个自己的操作符,但它实际上是“一个操作符后跟 = 字符”。

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

因为它不是由 Seq[T] 上的任何隐式或显式方法提供的或者无论如何,它不会出现在生成的 scaladoc 中的任何地方。

所以要回答一般问题:

  • 它是一种语言结构,因此唯一记录它的地方是规范,遗憾的是,
  • 但是,如果你发现一些 "<?>="某处未知运算符,查找 "<?>" 的定义,那肯定会被记录下来。


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

    §6.12.4:

    An assignment operator is an operator symbol (syntax category op in (§1.1)) that ends in an equals character “=”, with the exception of operators for which one of the following conditions holds:

    (1) the operator also starts with an equals character, or

    (2) the operator is one of (<=), (>=), (!=).



    它还在后面说,只有在尝试了所有其他选项(包括潜在的隐式)时才会发生。

    关于scala - 如何找到隐式转换类中定义的方法/操作的定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17979209/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com