gpt4 book ai didi

scala - 执行 Scalac -Xprint :typer? 时什么是

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

我写了一点 Scala

object SquareNumbers extends App {
val numbers = List(1,2,3,4,5)
val squares = numbers map (i => i * i)
println (squares)
}

并运行它 scalac如此:
$ scalac -Xprint:typer SquareNumbers.scala
[[syntax trees at end of typer]] // SquareNumbers.scala
package <empty> {
object SquareNumbers extends Object with App {
def <init>(): SquareNumbers.type = {
SquareNumbers.super.<init>();
()
};
private[this] val numbers: List[Int] = immutable.this.List.apply[Int](1, 2, 3, 4, 5);
<stable> <accessor> def numbers: List[Int] = SquareNumbers.this.numbers;
private[this] val squares: List[Int] = SquareNumbers.this.numbers.map[Int, List[Int]](((i: Int) => i.*(i)))(immutable.this.List.canBuildFrom[Int]);
<stable> <accessor> def squares: List[Int] = SquareNumbers.this.squares;
scala.this.Predef.println(SquareNumbers.this.squares)
}
}

我的问题是,什么是 <stable><accessor>在输出中?他们叫什么(例如,他们有集体名词吗),他们做什么?

猜测一下,我会说这意味着它们是 vals 而不是 vars,并且意味着它是从对象外部调用的......

最佳答案

这些是内部(即,不通过新的 2.10 反射 API 公开)标志。官方编译器ScalaDoc site似乎已关闭,但您可以看到 details 的 Scala 源代码:

final val STABLE   = 1 << 22 // functions that are assumed to be stable
// (typically, access methods for valdefs)
// or classes that do not contain abstract types.

And :
final val ACCESSOR = 1 << 27 // a value or variable accessor (getter or setter)

稍后在该文件中,您可以找到标识符(例如 STABLE )和打印字符串( <stable> )之间的映射、哪些标志在哪些阶段显示的列表等。

关于scala - 执行 Scalac -Xprint :typer? 时什么是 <stable> 和 <accessor>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18023683/

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