Saya menemukan yang berikut ini dalam kode Scala:
class MyClass { ... val a = new A; import a._ }
Apa sebenarnya arti val a = new A; import a._
?
Saya menemukan yang berikut ini dalam kode Scala:
class MyClass { ... val a = new A; import a._ }
Apa sebenarnya arti val a = new A; import a._
?
Ini mengimpor metode dan variabel dari objek a. Jadi kalau mau menelpon a.foo()
, tinggal menelpon foo()
saja.
Artinya semua metode dan variabel objek a
bertipe A
sekarang tersedia di blok (cakupan) ini tanpa menyebutkan a
secara eksplisit. Jadi jika A
memiliki metode bar()
kini Anda dapat mengatakan:
bar()
alih-alih
a.bar()
tetapi hanya dalam lingkup di mana import
didefinisikan.
Mari kita jelaskan hal ini dengan sesuatu yang harus Anda ketahui:
println("Hello world")
Pertanyaannya adalah: mengapa itu berhasil? Tidak ada objek bernama println
dengan metode apply
, yang merupakan penjelasan biasa untuk kode yang terlihat seperti itu. Nah, yang terjadi, kode di atas benar-benar melakukan hal ini:
Predef.println("Hello world")
Dengan kata lain, println
adalah metode pada objek scala.Predef
. Lalu bagaimana cara menggunakannya seperti di atas? Nah, seperti ini:
import scala.Predef._
println("Hello world")
Mengimpor konten referensi stabil (yaitu, bukan var
atau def
) akan membuat metodenya tersedia tanpa harus mengawalinya dengan reference.
.
Itu juga membuat implisit apa pun yang ditentukan di dalamnya tersedia, yang merupakan cara konversi implisit yang ditentukan di dalam scala.Predef
juga tersedia -- Scala mengimpor konten java.lang
, scala
dan scala.Predef
(dalam urutan itu, sehingga yang terakhir menimpa yang sebelumnya) .