2009-04-03 15 views
7

मैं MATLAB में कुछ साधारण ऑब्जेक्ट-ओरिएंटेड कोड पर काम कर रहा हूं। मैं अपनी कक्षा में से किसी एक को कॉल करने की कोशिश कर रहा हूं जिसमें इसकी परिभाषा में कोई इनपुट या आउटपुट तर्क नहीं है।मुझे किसी भी पास नहीं होने पर "बहुत अधिक इनपुट तर्क" त्रुटि क्यों मिलती है?

समारोह परिभाषा:

function roll_dice

समारोह कॉल:

obj.roll_dice;

जब यह मार डाला जाता है, MATLAB का कहना है:

??? Error using ==> roll_dice 
Too many input arguments. 

Error in ==> DiceSet>Diceset.Diceset at 11 
obj.roll_dice; 
(etc...) 

किसी को भी किसी भी विचार क्या हो सकता है मैं कारण टी? क्या गुप्त स्वचालित तर्क हैं मुझे पता है कि मैं गुजर रहा हूं?

उत्तर

13

जब आप फोन करना:

obj.roll_dice; 

यह वास्तव में के बराबर है:

roll_dice(obj); 

तो obj "गुप्त" स्वचालित तर्क roll_dice को पारित किया जा रहा है। यदि आप एकल इनपुट तर्क स्वीकार करने के लिए विधि roll_dice को फिर से लिखते हैं (भले ही आप इसका उपयोग न करें), चीजों को सही तरीके से काम करना चाहिए।

वैकल्पिक रूप से, यदि आप यह सुनिश्चित करने के लिए जानते हैं कि आपकी विधि roll_dice क्लास ऑब्जेक्ट पर कोई भी संचालन करने वाला नहीं है, तो आप इसे static methodDan suggests के रूप में घोषित कर सकते हैं।

MATLAB, here's a link to the online documentation में ऑब्जेक्ट उन्मुख प्रोग्रामिंग के बारे में अधिक जानकारी के लिए।

+0

आईई, roll_dict किसी ऑब्जेक्ट पर एक विधि के रूप में कहा जा रहा है जब यह नहीं होना चाहिए। Obj.roll_dice() के बजाय roll_dice() आज़माएं। –

+0

यह काम कर सकता है, लेकिन उसने कहा था कि roll_dice एक क्लास विधि है, इसलिए मुझे लगता है कि यह किसी दिए गए ऑब्जेक्ट पर काम करने का इरादा रखता है। – gnovice

+0

आप सही थे, लेकिन अब मुझे एक अलग समस्या है। मैं जावा और PHP जैसी भाषाओं से आ रहा हूं जहां कक्षाओं का उपयोग करने के लिए यह काफी सरल है। Self.roll_dice या this.roll_dice के बराबर क्या है? – farr

3

मेरा मानना ​​है कि आप रोल_डिइस को स्थैतिक विधि घोषित करके इसे भी प्राप्त कर सकते हैं।

+0

+1: हां, यदि roll_dice एक स्थैतिक विधि है तो obj.roll_dice को काम करना चाहिए फ़ंक्शन परिभाषा में कोई भी इनपुट तर्क जोड़ने की आवश्यकता के बिना। – gnovice