yang Enumeration
sifat memiliki anggota jenis Value
yang mewakili unsur-unsur individual dari pencacahan (itu sebenarnya kelas batin, tetapi perbedaannya tidak penting di sini).
Jadi object WeekDay
mewarisi anggota tipe itu. Garis type WeekDay = Value
tersebut hanyalah sebuah alias tipe . Ini berguna, karena setelah Anda mengimpornya ke tempat lain dengan import WeekDay._
, Anda dapat menggunakan jenis itu, misalnya:
def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)
Sebaliknya, versi minimalnya adalah:
object WeekDay extends Enumeration {
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
dan Anda tidak perlu mengimpor konten object WeekDay
, tetapi Anda harus menggunakan type WeekDay.Value
dan untuk memenuhi syarat anggota individu. Jadi contohnya akan menjadi
def isWorkingDay(d: WeekDay.Value) = ! (d == WeekDay.Sat || d == WeekDay.Sun)
Pertanyaan kedua adalah tentang arti dari val Mon, ... = Value
. Ini memang sangat membingungkan jika Anda tidak melihat ke dalam implementasinya Enumeration
. Ini bukan penugasan tipe! Hal ini bukan memanggil dilindungi metode dengan nama yang sama , Value
yang mengembalikan contoh konkret dari jenis Value
.
Hal ini terjadi bahwa Anda dapat menulis val a, b, c = foo
di Scala, dan untuk setiap nilai a
, b
dan c
metode foo
akan dipanggil lagi dan lagi. Enumeration
menggunakan trik ini untuk menaikkan penghitung internal sehingga setiap nilai bersifat individual.
Jika Anda membuka dokumen Scala API Enumeration
dan mengkliknya Visibility: All
, Anda akan melihat metode itu muncul.