Ho scritto un po 'di ScalaCosa sono <stable> e <accessor> quando si esegue Scalac -Xprint: typer?
object SquareNumbers extends App {
val numbers = List(1,2,3,4,5)
val squares = numbers map (i => i * i)
println (squares)
}
ed eseguirlo tramite scalac
come così:
$ 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)
}
}
La mia domanda è, quali sono <stable>
e <accessor>
in uscita? Come si chiamano (come in, hanno un nome collettivo) e cosa fanno?
A occhio e croce, direi che significava che erano vals invece di Vars, e intendo dire che si trattava di un richiamabile al di fuori dell'oggetto ...