swift - अप्रत्यक्ष enums और structs



(1)

शुरू करने के लिए, मैं कहना चाहता हूं कि मुझे पता है कि एसओ के भीतर कई लेख और प्रश्न हैं जो स्विफ्ट में indirect कीवर्ड का संदर्भ देते हैं।

indirect उपयोग के लिए सबसे लोकप्रिय स्पष्टीकरण रिकर्सिव structs और enums के लिए अनुमति है।

केवल indirect हमें क्या करने की अनुमति देता है, इसके बारे में जानने के बजाय, मैं जानना चाहता हूं कि यह हमें रिकर्सिव structs और enums का उपयोग करने की अनुमति देता है।

प्रशन:

क्या ऐसा इसलिए है क्योंकि structs और enums मूल्य प्रकार हैं और मूल्य प्रकार अच्छी तरह से स्केल नहीं करते हैं यदि वे एक पुनरावर्ती संरचना में बने हैं? क्यूं कर?

क्या संदर्भ प्रकार की तरह व्यवहार करने के लिए indirect मूल्य प्रकार व्यवहार को संशोधित करता है?

निम्नलिखित दो उदाहरण बस ठीक संकलित करें। अंतर क्या है?

indirect enum BinaryTree<T> {
  case node(BinaryTree<T>, T, BinaryTree<T>)
  case empty
}

enum BinaryTree<T> {
  indirect case node(BinaryTree<T>, T, BinaryTree<T>)
  case empty
}

indirect कीवर्ड दृश्यों के पीछे संकेत की एक परत पेश करता है।

आप इंगित करते हैं कि एक गणना केस इसके पहले अप्रत्यक्ष लिखकर पुनरावर्ती है, जो संकलक की आवश्यक परत डालने के लिए संकलक को बताता है

here

Structs और enums का महत्वपूर्ण हिस्सा यह है कि वे एक स्थिर आकार हैं। पुनरावर्ती structs या enums को अनुमति देने से सीधे इसका उल्लंघन होगा, क्योंकि रिकर्सन की अनिश्चित संख्या होगी, इसलिए आकार को निरंतर और अप्रत्याशित बना दिया जा सकता है। indirect निरंतर आकार संरचना का संदर्भ देने के लिए निरंतर आकार संदर्भ का उपयोग करता है।

आपके द्वारा दिखाए गए दो कोड स्निपेट के बीच एक अलग है।

  1. कोड का पहला भाग BinaryTree<T> हर जगह संदर्भ में संग्रहीत करता है।

  2. कोड का दूसरा भाग BinaryTree<T> केवल node के मामले में संदर्भ द्वारा संग्रहीत node । Ie BinaryTree<T> आमतौर पर इसका स्पष्ट indirect से indirect node केस को छोड़कर, इसका मूल्य सीधे संग्रहीत किया जाता है।





enums