Enumerationविशेषता एक प्रकार सदस्य है Valueगणन के व्यक्तिगत तत्वों (यह वास्तव में एक आंतरिक वर्ग है, लेकिन अंतर बात यहाँ नहीं करता है) का प्रतिनिधित्व।
इस प्रकार object WeekDayउस प्रकार के सदस्य विरासत में मिले। लाइन type WeekDay = Valueसिर्फ एक प्रकार का उपनाम है । यह उपयोगी है, क्योंकि आप इसे कहीं और आयात करने के बाद import WeekDay._, आप उस प्रकार का उपयोग कर सकते हैं, जैसे:
def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)
इसके बजाय, एक न्यूनतम संस्करण बस होगा:
object WeekDay extends Enumeration {
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
और आपको सामग्री को आयात करने की आवश्यकता नहीं हैobject WeekDay , लेकिन फिर आपको प्रकार का उपयोग WeekDay.Valueकरने और व्यक्तिगत सदस्यों को योग्य बनाने की आवश्यकता होगी । तो उदाहरण बनेगा
def isWorkingDay(d: WeekDay.Value) = ! (d == WeekDay.Sat || d == WeekDay.Sun)
दूसरा प्रश्न अर्थ के बारे में है val Mon, ... = Value। यदि आप इसे लागू नहीं करते हैं तो यह वास्तव में बहुत भ्रामक है Enumeration। यह एक प्रकार का असाइनमेंट नहीं है! यह बजाय एक संरक्षित बुला रहा है एक ही नाम के विधि , Valueहै, जो प्रकार का एक ठोस उदाहरण देता है Value।
यह इतना है कि आप लिख सकते हैं val a, b, c = fooस्काला में, और प्रत्येक मान के लिए a, bऔर cविधि fooबार-बार बुलाया जाएगा। Enumerationएक आंतरिक काउंटर को बढ़ाने के लिए इस चाल का उपयोग करता है ताकि प्रत्येक मूल्य अलग-अलग हो।
यदि आप स्काला एपीआई डॉक्स खोलते हैं Enumerationऔर उस पर क्लिक करते हैं Visibility: All, तो आपको वह तरीका दिखाई देगा।