REPL kết thúc tất cả các câu lệnh của bạn (thực sự viết lại các câu lệnh của bạn) trong các đối tượng một cách tự động. Bạn có thể nhìn thấy nó trong hành động nếu bạn in mã trung gian bằng cách sử dụng tùy chọ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))
}
}
}
}
Vì vậy, phương pháp của bạn hoho
thực sự là $line1.$read.$iw.$iw.hoho
. Sau đó, khi bạn sử dụng hoho("foo")
sau này, nó sẽ viết lại để thêm gói và các đối tượng bên ngoài.
Ghi chú bổ sung: đối với tập lệnh, -Xprint:typer
(-Xprint:parser
) cho biết mã được bao bọc bên trong khối mã trong main(args:Array[String])
của đối tượng Main
. Bạn có quyền truy cập vào các đối số là args
hoặc argv
.
Cảm ơn. Điều tương tự cũng xảy ra nếu tôi lưu định nghĩa phương thức trong tập lệnh .scala và thực thi nó bằng scala? –
Rahul
@Rahul, tôi đã thêm thông tin cho tập lệnh, cơ chế khác. – huynhjl