Scala Language
हैंडलिंग इकाइयों (उपाय)
खोज…
वाक्य - विन्यास
- वर्ग मीटर (वैल मीटर: डबल) AnyVal का विस्तार करता है
- टाइप मीटर = डबल
टिप्पणियों
इकाइयों के लिए मूल्य वर्गों या उनके लिए एक समर्पित पुस्तकालय का उपयोग करने की सिफारिश की जाती है।
उपनाम लिखें
type Meter = Double
इस सरल दृष्टिकोण में यूनिट हैंडलिंग के लिए गंभीर कमियां हैं जो हर दूसरे प्रकार की हैं जो एक Double
है इसके साथ संगत होगा:
type Second = Double
var length: Meter = 3
val duration: Second = 1
length = duration
length = 0d
उपरोक्त सभी संकलन हैं, इसलिए इस मामले में इकाइयों को केवल कोड के पाठकों (केवल इरादे) के लिए इनपुट / आउटपुट प्रकारों को चिह्नित करने के लिए उपयोग किया जा सकता है।
मूल्य वर्ग
case class Meter(meters: Double) extends AnyVal
case class Gram(grams: Double) extends AnyVal
मूल्य वर्ग इकाइयों को सांकेतिक शब्दों में बदलने के लिए एक प्रकार-सुरक्षित तरीका प्रदान करते हैं, भले ही उन्हें उपयोग करने के लिए थोड़े अधिक वर्णों की आवश्यकता हो:
var length = Meter(3)
var weight = Gram(4)
//length = weight //type mismatch; found : Gram required: Meter
AnyVal
s का विस्तार करके, JVM स्तर पर, उन्हें नियमित रूप से आदिम प्रकार (इस मामले में Double
s) के उपयोग के लिए कोई रनटाइम जुर्माना नहीं है।
यदि आप स्वचालित रूप से अन्य इकाइयाँ उत्पन्न करना चाहते हैं (जैसे Velocity
उर्फ MeterPerSecond
), तो यह दृष्टिकोण सबसे अच्छा नहीं है, हालांकि ऐसे पुस्तकालय भी हैं जिनका उपयोग उन मामलों में भी किया जा सकता है: