2011-07-02 12 views
8

कैसे जांचें कि किसी फ़ंक्शन पर कोई तर्क प्रदान नहीं किया गया है?गणित: किसी फ़ंक्शन पर कोई तर्क प्रदान नहीं किया गया है या नहीं?

उदाहरण के लिए

, अगर मेरे पास है:

f[x_Integer]:=1 
    f[x_]:=Message[errm::err, x] 

और मेरे पास कोई तर्क के साथ च फोन:

f[] 

'कुछ नहीं होता', मैं एक विशिष्ट (त्रुटि-) हालत बाध्य करना चाहते हैं।

(पृष्ठभूमि: मैं संकुल और OO-प्रणाली कक्षाओं के लिए munit परीक्षण कर रही हूँ।)

+1

जहां तक ​​मैं समझता हूं कि यह गणित में कार्य करता है, उनके मानकों के लिए "बाध्य" होते हैं, इस अर्थ में कि यदि आप एफ (ए) को परिभाषित करते हैं, तो एफ अभी भी अनिर्धारित है। – Gleno

+3

@Gleno गणित में कोई कार्य नहीं है (संभवतः शुद्ध और संकलित कार्यों को छोड़कर)। फ़ंक्शन परिभाषाओं की तरह वैश्विक नियम क्या हैं। आपके पास शायद इसका अर्थ यह है कि पैटर्न 'एफ [कुछ]' के लिए वैश्विक नियम का अस्तित्व सादा 'एफ' के लिए एक और वैश्विक नियम का अस्तित्व नहीं दर्शाता है - जो सच है। –

उत्तर

10

यह?

f[x_Integer] := 1 
f[x_] := Message[errm::err, x] 
f[] := Message[errm::err] 
+0

मेरा जवाब हटा दिया गया ... एक मिनट देर हो चुकी है :) –

+0

@ मेरे भाग पर अविश्वासी भाग्य :) – acl

+2

+1। @ Ndroock1 के कोड में और यहां 'शून्य' त्रुटि पर वापस आ गया है। यह आमतौर पर उचित (मेरे लिए) प्रतीत नहीं होता है। उत्पादन त्रुटियों पर भी किसी भी तरह सार्थक होना चाहिए। प्रतीकात्मक माहौल में, 'f []: =" कुछ भी नहीं "/; संदेश [errm :: err]' की चाल का उपयोग करना आम है, 'f []' दोनों को एक संदेश वापस करने और स्वयं का मूल्यांकन करने के लिए। प्रोग्रामिंग वातावरण में, एक त्रुटि संदेश जारी करना और '$ विफल' वापस करना आम है, जैसे 'f []: = (संदेश [errm :: err]; $ विफल) '। कभी-कभी (आंतरिक कार्यों के लिए कहते हैं) अपवाद अधिक उपयुक्त हैं। कौन सा चयन करने के लिए संदर्भ पर निर्भर करता है। –

9

एक विकल्प के रूप में स्पष्ट रूप से शून्य-आर्ग संभावना को सूचीबद्ध करने के लिए, आप

f[x_Integer] := 1 
f[args___] := (Message[errm::err, {args}];$Failed); 

जो भी कई पारित कर दिया तर्कों की त्रुटि मामलों को पकड़ने होगा (यह सोचते हैं कि यह एक त्रुटि है) कर सकते हैं।

+0

यह एक अच्छा विचार है – acl

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

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