Mathematica: How is OptionValue implemented? -


अंतर्निहित के कार्यान्वयन में कुछ जादू शामिल है, ताकि

विकल्प वैल्यू [नाम] के बराबर है ऑप्शन वैल्यू [एफ, नेम] , जहां f उस परिवर्तन के नियम के बाएं हाथ के सिर में है OptionValue [name] प्रकट होता है।

क्या किसी के पास यह विचार है कि Options के समान कुछ कैसे प्राप्त करें, यानी एक ऑटोऑप्टेशंस [] जो परिवर्तन नियम के बाएं हाथ पर प्रतीक के लिए निर्धारित विकल्पों को हल करेगा, जिसमें स्वतः ऑप्शन [] प्रकट होता है? स्पष्टता के लिए, जो मैं देख रहा हूं वह तरीका है

  विकल्प [foo] = {बार-> 1}; Foo [OptionsPattern []]: = ऑटोऑप्शन [] foo []   

आउटपुट {बार-> 1}

अंतिम लक्ष्य कुछ भी करने के लिए बिना अनुरोधित कुछ करना है, लेकिन किसी भी परिभाषा के आरएचएस।

एक सरल, बहुत योजनाबद्ध संस्करण: <पूर्व> मॉड्यूल [{की कोशिश की}, असुरक्षित [सेट डिलीएटेड]; सेट डिलीएटेड [f_ [आर्ग्स ___, ऑप्टप्ट: ऑप्शनपेटर्न []], आरएएस_एआर /; फ्रीक्यू [अपरिव्वाइवलेट [आरएएस], ऑटोऑप्टेशंस []]: = ब्लॉक [{ट्रांजेल = ट्रू}, एफ [एजीआर, ओप्प्ट]: = ब्लॉक [[ऑटो ऑप्शन], ऑटो ऑप्शन [] = विकल्प [एफ]; Rhs]] /; ! TrueQ [कोशिश की]; [सेट डिलाएटेड] को सुरक्षित रखें;]

आपका उपयोग:

  में [8]: = विकल्प [foo] = {बार - & gt; 1}; Foo [OptionsPattern []]: = ऑटोऑप्शन [] फ़ू [] आउट [10] = {बार - & gt; 1}   

ध्यान दें कि जब स्पष्ट विकल्प भी पारित हो जाते हैं तो यह काम नहीं करेगा - उनके लिए लेखांकन कुछ और काम है, और यह आमतौर पर एक अच्छा अभ्यास नहीं है क्योंकि मैं अतिभारित SetDelayed - लेकिन आपने इसके लिए पूछा और आप इसे प्राप्त करें

Comments