2011-12-16 24 views
5

के लिए विशेष साजिश कार्यों में विकल्पों को पारित करने में समस्याएं यह एक विशेषज्ञ के लिए जल्दी होनी चाहिए, लेकिन मैं विकल्पों के साथ कार्यों को परिभाषित करने में अपेक्षाकृत नया हूं। मुझे लगता है कि करने की जरूरत है मेरी समारोह में एक वैकल्पिक पैरामीटरगणित

  1. :

    MyPlotFunction[params_, optionalparameter_List:{1,2,3}, opts:OptionsPattern[]]:= 
        Plot [ stuff, {x,0,1}, [email protected][{opts},[email protected]]]; 
    
    Options[MyPlotFunction] = { PlotRange->{-5,5}, Frame->True, ... other plot options}; 
    

    चार मामूली बारीकियों रहे हैं: यहाँ मैं क्या कोशिश की है की एक योजनाबद्ध, मैं कोड दिखा के बाद के बारे में समझाएंगे है पूर्णांक की एक सूची बनें।

  2. मैं प्लॉट के किसी भी विकल्प के साथ फ़ंक्शन को कॉल करने की क्षमता चाहता हूं, विशेष रूप से तीसरे पंक्ति में निर्दिष्ट डिफ़ॉल्ट मानों के अलावा अन्य मानों का उपयोग करना चाहता हूं।
  3. मैं कुछ विकल्पों के लिए डिफ़ॉल्ट मान रखना चाहता हूं।
  4. मैं संभावित रूप से फ़ंक्शन में अन्य विकल्प रखना चाहता हूं, इसलिए यह गारंटी नहीं है कि सभी विकल्पों को साजिश के माध्यम से पारित किया जाना चाहिए।

लेकिन मेरे ऊपर जो कुछ है, वह काम नहीं करता है। मेरे द्वारा सेट किए गए डिफ़ॉल्ट विकल्प अनदेखा किए जाते हैं, फिर भी वे मेरे फ़ंक्शन के लिए ??MyPlotFunction जानकारी में दिखाई देते हैं। यदि आप लोग अभी तक त्रुटि नहीं खोज सकते हैं तो मैं उदाहरण दूंगा।

संपादित करें: उदाहरण वह काम नहीं करता:

  1. SimplePlot[t_,opts:OptionsPattern[{PlotRange->{-4,4},Frame->True}]]:= Plot[2x+t,{x,0,1},opts]; विफल, डिफ़ॉल्ट विकल्प नजरअंदाज कर दिया है।

  2. SimplePlot[t_,opts:OptionPattern[]]:= Plot[2x+t],{x,0,1},opts]; Options[SimplePlot] = {PlotRange->{-4,4},Frame->True}; विफलता, डिफ़ॉल्ट विकल्प को अनदेखा किया जाता है।

  3. SimplePlot[t_,opts__:{PlotRange->{-4,4},Frame->True}]:= Plot[2x+t,{x,0,1},opts]; डिफ़ॉल्ट विकल्प एक नंगे कॉल के साथ काम करते हैं, लेकिन अगर इन विकल्पों में या किसी अन्य साजिश विकल्प में से एक ओवरराइड की गई है शेष चूक खो जाते हैं।

    FilterRules[{opts, Options[MyPlotFunction]}, [email protected]] 
    

    यहाँ एक सरल उदाहरण है:: तो आप स्पष्ट रूप से किसी भी गैर डिफ़ॉल्ट विकल्प सेटिंग्स में शामिल करने की जरूरत है

+0

आप और अधिक विस्तार के साथ इस संपादित कर सकते हैं: ब्रेट के जवाब देने के लिए, के बाद से दिए गए विकल्पों में पहले की विषय वस्तु के विकल्पों बाद में दिया जाता है, और के बाद से प्लॉट के लिए विकल्प के रूप में एक सूची दी जा सकती है, तो आप कुछ इस तरह लिख सकते हैं। क्या सामान आप प्लॉट कर रहे हैं? यदि ऐसा है तो इसे साजिश के लिए तर्क के रूप में डाल दें। यदि नहीं तो यह कहां जाता है? यदि आप समझाते हैं कि वैकल्पिक पैरामीटर क्या करना है तो यह भी मदद कर सकता है। आपके फ़ंक्शन में बंद नहीं है "]" लेकिन मुझे लगता है कि यह एक कट और पेस्ट त्रुटि है। आपको यहां और मैथ ग्रुप पर विकल्पवैल्यू, फ़िल्टररल्स और अन्य विकल्पों के बारे में अन्य चर्चाएं मिलेंगी, इस पर आपको विकल्पों का उपयोग करने में मदद करनी चाहिए। –

उत्तर

9

OptionsPattern[] केवल विकल्पों में पारित कर रहे हैं फैल जाती है, की तरह कुछ का उपयोग करके कहते हैं कि

Options[MyPlotFunction] = {PlotRange -> {-5, 5}, Frame -> True}; 

MyPlotFunction[params_, optionalparameter_List: {1, 2, 3}, 
    opts : OptionsPattern[MyPlotFunction]] := 
Plot[optionalparameter, {x, 0, 1}, 
    [email protected][{opts, Options[MyPlotFunction]}, [email protected]]] 

enter image description here

+0

यह उपयोगी लग रहा है, इसे अभी जांच रहा है। – braydenware

+0

यह काम करता है, और मेरे आवेदन के लिए काम करता है। एक हिस्सा मुझे समझ में नहीं आता है कि अगर मैं विकल्पों को फ़िल्टर नहीं करता तो यह अब काम नहीं करता है।सटीक वही कोड लें और केवल ऑप्टेट के साथ @ फ़िल्टरफ्यूल [{विकल्प, विकल्प [MyPlotFunction]}, विकल्प @ प्लॉट] मूल्यांकन करें। ऐसा लगता है कि आप निर्दिष्ट विकल्पों में डिफ़ॉल्ट विकल्पों में शामिल हो रहे हैं, और इसे साजिश में खिला रहे हैं। प्लॉट कैसे तय करता है कि जब आप इसे उसी विकल्प के लिए विरोधाभासी मूल्यों पर खिलाते हैं तो इसका उपयोग कैसे करें? – braydenware

+4

@braydenware बिंदु यह नहीं है कि आप * फ़िल्टर * विकल्प हैं, लेकिन आप '{opts} 'के बाद * अपने डिफ़ॉल्ट विकल्प पास करते हैं, इसलिए स्पष्ट' {opts} 'की अनुपस्थिति में भी, आप अभी भी अपना सभी डिफ़ॉल्ट पास करते हैं विकल्प प्लॉट स्पष्ट रूप से 'प्लॉट' के लिए। यही कारण है कि ब्रेट ने उन्हें '{opts}' के बाद रखा - ताकि '{opts} 'में स्पष्ट रूप से पारित विकल्प' विकल्प [MyPlotFunction] 'से उन लोगों को ओवरराइड कर सकें जो उनके बाद अनुसरण करते हैं। –

0

टिप्पणी में बताया गया है

Options[SimplePlot] = {PlotRange -> {-4, 4}, Frame -> True}; 

SimplePlot[t_, opts : OptionsPattern[]] := 
    Plot[2 x + t, {x, 0, 1}, opts, #] & @ Options[SimplePlot];