2016-12-12 9 views
6

के बीच सबटाइपिंग coursera कार्यात्मक प्रोग्रामिंग पाठ्यक्रम में, मैं एक सूक्ष्म अवधारणा में आया था।फ़ंक्शन प्रकार

तो ए 2 <: A1 और बी 1 <: बी 2, तो (A1 => बी 1) <: (A2 => बी 2)

औचित्य

  • जब हम ए 2 के लिए एक तर्क पारित करते हैं और उप-संबंध संबंधों के कारण, हम ए 1 को एक ही तर्क दे सकते हैं। समारोह A1
  • तब लागू => बी 1
  • फिर उस समारोह बी 1 देता है और subtyping कि बी 2

के रूप में उत्तीर्ण हमारे पास इसका एक वेन आरेख आकर्षित करते हैं की वजह से,

  • आरेख 1 diagram 1

  • आरेख 2 diagram 2

    • इसके लिए सही चित्र कौन सा है?
    • उस वेन आरेख का उपयोग करके परिणाम कैसे समझाया जा सकता है?

संदर्भ: Youtube video

धन्यवाद F2

के लिए F1 और (A2 => बी 2) के लिए

उत्तर

4

लेट्स कॉल (ए 1 => बी 1) के एक समारोह एफ 1 के लिए किसी अन्य फ़ंक्शन F2 का उप-प्रकार बनें, हमें इसे F2 के स्थान पर स्वीकार करने के लिए टाइप सिस्टम की आवश्यकता है।

आप ए को स्वीकार करने वाले फ़ंक्शन को किसी ए के उप-प्रकार को पास कर सकते हैं, लेकिन कोई सुपरर्ट टाइप नहीं करता है। इसका मतलब यह है कि, एफ 1 के लिए एफ 2 का उपप्रकार होना चाहिए, इसे कम से कम सब कुछ स्वीकार करना चाहिए जो F2 तर्क के रूप में स्वीकार करता है, इसलिए ए 1 ए 2 का सुपरटेप होना चाहिए।

दूसरी तरफ, एफ 1 का उत्पादन कम से कम एफ 2 के आउटपुट के रूप में विस्तृत होना चाहिए ताकि एफ 2 के आउटपुट का उपयोग किया जा सके। इसका मतलब है कि बी 1 बी 2 का उप प्रकार होना चाहिए।

मुझे यकीन नहीं है कि आरेख यह देखने का एक अच्छा तरीका है कि यह एक साथ कैसे फिट बैठता है, लेकिन मैं कहूंगा कि, दोनों में से, आरेख 1 सबसे सटीक है। एक उदाहरण

आइए नज़र: आप, समारोह f1(s: Set): Set फिर f2(s: Iterable): SortedSet f1 की एक उप-प्रकार है के बाद से यह f1 के स्थान पर इस्तेमाल किया जा सकता कहो।

f1 को इसके तर्कों को Set या Set के किसी उप प्रकार के होने की आवश्यकता है। ये सभी तर्क एफ 2 में भी मान्य हैं। एफ 1 का आउटपुट Set है, इसलिए f2 का आउटपुट Set के रूप में प्रयोग योग्य होना चाहिए। चूंकि SortedSetSet का एक उप प्रकार है, यह भी सच है।

संबंधित मुद्दे