कार्ल का जवाब अच्छा है। यहाँ एक अतिरिक्त उपयोग है जो मुझे नहीं लगता कि किसी और ने उल्लेख किया है। के जैसा
if E then A else B
एक प्रकार होना चाहिए जिसमें प्रकार में सभी मान शामिल हैं और प्रकार में सभी मान शामिल A
हैं B
। यदि प्रकार B
है Nothing
, तो if
अभिव्यक्ति का प्रकार किस प्रकार का हो सकता है A
। मैं अक्सर एक दिनचर्या घोषित करता हूँ
def unreachable( s:String ) : Nothing = throw new AssertionError("Unreachable "+s)
यह कहना कि कोड पहुंचने की उम्मीद नहीं है। चूंकि इसका प्रकार है Nothing
, unreachable(s)
अब परिणाम के प्रकार को प्रभावित किए बिना किसी भी if
(या अधिक बार) में उपयोग किया जा सकता है switch
। उदाहरण के लिए
val colour : Colour := switch state of
BLACK_TO_MOVE: BLACK
WHITE_TO_MOVE: WHITE
default: unreachable("Bad state")
Scala में ऐसा कुछ नहीं है।
Nothing
(कार्ल के उत्तर में उल्लिखित) के लिए एक अन्य उपयोग मामला सूची है [कुछ भी नहीं] प्रत्येक सदस्य के पास कुछ भी नहीं टाइप करने वाली सूचियों का प्रकार है। इस प्रकार यह खाली सूची का प्रकार हो सकता है।
उस की प्रमुख संपत्ति Nothing
इन उपयोग मामलों को काम करती है , यह नहीं है कि इसका कोई मूल्य नहीं है - हालांकि, स्काला में, उदाहरण के लिए, इसका कोई मूल्य नहीं है - यह है कि यह हर दूसरे प्रकार का एक उपप्रकार है।
मान लीजिए कि आपके पास एक भाषा है जहाँ हर प्रकार का एक ही मूल्य है - चलो इसे कॉल करें ()
। ऐसी भाषा में इकाई प्रकार, जिसका ()
एकमात्र मान होता है, हर प्रकार का एक उपप्रकार हो सकता है। यह इस अर्थ में एक निचला प्रकार नहीं बनाता है कि ओपी का मतलब है; ओपी स्पष्ट था कि नीचे के प्रकार में कोई मूल्य नहीं है। हालाँकि, जैसा कि यह एक प्रकार है जो हर प्रकार का एक उपप्रकार है, यह नीचे के प्रकार के रूप में एक ही भूमिका निभा सकता है।
हास्केल चीजों को थोड़ा अलग तरीके से करता है। हास्केल में, एक अभिव्यक्ति जो कभी मूल्य पैदा नहीं करती है, उसके प्रकार की योजना हो सकती है forall a.a
। इस प्रकार की योजना का एक उदाहरण किसी अन्य प्रकार के साथ एकीकृत होगा, इसलिए यह प्रभावी रूप से नीचे के प्रकार के रूप में कार्य करता है, भले ही (मानक) हास्केल में उपप्रकार की कोई धारणा नहीं है। उदाहरण के लिए, error
मानक प्रस्तावना से कार्य प्रकार योजना है forall a. [Char] -> a
। तो आप लिख सकते हैं
if E then A else error ""
और अभिव्यक्ति का प्रकार A
किसी भी अभिव्यक्ति के प्रकार के समान होगा A
।
हास्केल में खाली सूची में टाइप स्कीम है forall a. [a]
। यदि A
एक अभिव्यक्ति है जिसका प्रकार एक सूची प्रकार है, तो
if E then A else []
के रूप में एक ही प्रकार के साथ एक अभिव्यक्ति है A
।
void
डेटा को परिभाषित नहीं कर सकता है ...