2011-04-18 14 views
6

मैथमैटिका कई फ़ंक्शन प्रदान करता है जो Dynamic को तर्क के रूप में संभालने में सक्षम हैं। मुझे आश्चर्य है कि कैसे एक एक समारोह पैटर्न है कि एक तर्क के रूप एक गतिशील अभिव्यक्ति लेता है परिभाषित करने के बारे में चला जाता हैफ़ंक्शन तर्क के रूप में गतिशील

FileNameSetter[Dynamic[name]] 
uses the dynamically updated current value of name, with the 
value of name being reset if a different file is chosen. 

: उदाहरण के लिए, समारोह FileNameSetter निम्नलिखित संस्करण है।

SinLocatorPane[Dynamic[sinvalue_]] := 
LocatorPane[Dynamic[x, (x = #; sinvalue = Sin[First[#]]) &], 
      Plot[Sin[x], {x, 0, 10}]] 

एक गतिशील अभिव्यक्ति तर्क के लिए उपयोग करने के लिए सही पैटर्न क्या है: उदाहरण के लिए, यहाँ समारोह LocatorPane के गतिशील संस्करण रैप करने के लिए एक प्रयास है? फ़ंक्शन परिभाषा के अंदर गतिशील तर्क का उपयोग करने के साथ कोई चेतावनी है?

+3

मुझे लगता है कि ट्यूटोरियल/उन्नत मैनिपुलेट कार्यक्षमता का 'कस्टम नियंत्रण उपस्थिति' अनुभाग प्रासंगिक होगा। उस ट्यूटोरियल के शीर्ष पर वर्णित तीन पूर्वापेक्षाएँ भी पढ़ने के लिए मत भूलना। –

+0

ट्यूटोरियल को लिंक प्रदान करने के लिए धन्यवाद। – sakra

उत्तर

4

यदि आप एक ऐसा फ़ंक्शन लिखना चाहते हैं जो किसी निश्चित चर के मान को अपडेट करता है, तो यह संदर्भ द्वारा एक चर पारित करने जैसा है। गणित में इसे प्राप्त करने का मानक तरीका आपके कार्य पर Hold* विशेषताओं का उपयोग करना है।

SetAttributes[SinLocatorPane, HoldFirst]; 
SinLocatorPane[sinvalue_] := 
LocatorPane[Dynamic[x, (x = #; sinvalue = Sin[First[#]]) &], 
    Plot[Sin[x], {x, 0, 10}]] 

फिर

{Dynamic[sv], SinLocatorPane[sv]} 

अपने अपेक्षा के अनुरूप काम करेंगे। आपका कोड काम करता है क्योंकि डायनामिक में HoldFirst जिम्मेदार है और इसने आपके कोड को वेरिएबल sinvalue को अपडेट करने की अनुमति दी है। अन्यथा गतिशील की वास्तव में आवश्यकता नहीं थी

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