yang Enumerationsifat memiliki anggota jenis Valueyang mewakili unsur-unsur individual dari pencacahan (itu sebenarnya kelas batin, tetapi perbedaannya tidak penting di sini).
Jadi object WeekDaymewarisi anggota tipe itu. Garis type WeekDay = Valuetersebut 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.Valuedan 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 , Valueyang mengembalikan contoh konkret dari jenis Value.
Hal ini terjadi bahwa Anda dapat menulis val a, b, c = foodi Scala, dan untuk setiap nilai a, bdan cmetode fooakan dipanggil lagi dan lagi. Enumerationmenggunakan trik ini untuk menaikkan penghitung internal sehingga setiap nilai bersifat individual.
Jika Anda membuka dokumen Scala API Enumerationdan mengkliknya Visibility: All, Anda akan melihat metode itu muncul.