2015-12-08 6 views
8

में नीचे का प्रकार मैं सोच रहा हूं कि स्विफ्ट भाषा में bottom type है या नहीं।स्विफ्ट

किसी भी भ्रम पहले से उखाड़ फेंकने के लिए, unit type नीचे प्रकार हम Void या () तेज में के रूप में यह है के रूप में की तुलना में एक अलग तरह की है। Anyशीर्ष प्रकार है।

क्या मैं सबसे करीब होने के लिए मिल गया है, आश्चर्य की बात यह है कि में fatalError() के रूप में @noreturn विशेषता हम ज्यादातर पास इस समारोह सबसे दिया मनमाना प्रकार के अनुरूप कर सकते हैं।

लेकिन, बेशक, यह अधूरा है और इस तरह के रूप में एक सच्चे नीचे प्रकार के लिए एक बुरा विकल्प नहीं है, उदाहरण के लिए, स्काला में Nothing, हास्केल में undefined या यहाँ तक कि null जावा में।

तो, स्विफ्ट भाषा में एक निचला प्रकार है?

+3

मैं नहीं कर सकते कहो मैंने जो कुछ भी आप पूछ रहे हैं उसे देखा है, आप इस मामले के किस मामले में उपयोग करना चाहते हैं? – Arbitur

+1

@ अरबीबुर एक भाषा के परिप्रेक्ष्य से, यह प्रकार प्रणाली की पूर्णता को दर्शाता है। व्यावहारिक मामले के लिए, आप एक प्रकार को व्यक्त कर सकते हैं जो सभी प्रकारों को फैलाता है। टाइप अनुमान के साथ कुछ व्यवहारों से निपटने पर यह उपयोगी हो जाता है। आप [इस] (http://programmers.stackexchange.com/questions/277197/is-there-a-reason-to-have-a-bottom-type-in-a-programming-language) का उल्लेख कर सकते हैं। –

उत्तर

2

बाहर निकलता है कि स्विफ्ट में कोई नीचे का प्रकार नहीं है, लेकिन हम @noreturn विशेषता और जेनेरिक के साथ कुछ हैक्स के माध्यम से अपने सामान्य व्यवहार का नकल कर सकते हैं जैसा कि this talk में बताया गया है।

func undefined<A>(_ message: String = "") -> A { 
    fatalError("Not Implemented: \(message)") 
} 

तब हम अपने कोड की अभी तक लागू भागों चिह्नित करने के लिए इसका इस्तेमाल करते हैं संकलक त्रुटियों पारित करने के लिए कर सकते हैं:

func someComplexFunction<U: User>(u: U) -> U { 
    return undefined("Do this after creating user") 
} 

या हमारे कोड में कुछ invariances साबित करने के लिए:

let array = ["hello", "world"] 
let hello: String = array.first ?? undefined("This is impossible!")