El REPL envuelve todas sus declaraciones (en realidad reescribe sus declaraciones) en objetos automágicamente. Puede verlo en acción si se imprime el código intermedio mediante la opción -Xprint:typer
:
scala> def hoho(str:String) = {println("hoho " + str)}
[[syntax trees at end of typer]]// Scala source: <console>
package $line1 {
final object $read extends java.lang.Object with ScalaObject {
def this(): object $line1.$read = {
$read.super.this();
()
};
final object $iw extends java.lang.Object with ScalaObject {
def this(): object $line1.$read.$iw = {
$iw.super.this();
()
};
final object $iw extends java.lang.Object with ScalaObject {
def this(): object $line1.$read.$iw.$iw = {
$iw.super.this();
()
};
def hoho(str: String): Unit = scala.this.Predef.println("hoho ".+(str))
}
}
}
}
Así que su método es realmente hoho
$line1.$read.$iw.$iw.hoho
. Luego, cuando use hoho("foo")
más adelante, se reescribirá para agregar el paquete y los objetos externos.
Notas adicionales: para secuencias de comandos, -Xprint:typer
(-Xprint:parser
) revela que el código se envuelve dentro de un bloque de código en la main(args:Array[String])
de un objeto Main
. Usted tiene acceso a los argumentos como args
o argv
.
Gracias. ¿Ocurre lo mismo si guardo la definición del método en un script .scala y lo ejecuto usando scala? –
Rahul
@Rahul, he agregado la información para el script, el mecanismo es diferente. – huynhjl