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...) 

誰もが何が可能性が任意のアイデアを持っています私を引き起こすt?私が渡していることを知らない秘密の自動議論はありますか?

roll_dice(obj); 

のでobjroll_diceに渡される "秘密" 自動引数である:それは実際に相当し

obj.roll_dice; 

:あなたが電話をかける

答えて

13

。メソッドroll_diceを書き直して(たとえそれを使用しなくても)単一の入力引数を受け入れるようにすると、正しく動作するはずです。

また、メソッドroll_diceがクラスオブジェクトに対して操作を実行しないことがわかっている場合は、static methodとしてDan suggestsと宣言できます。

MATLABのオブジェクト指向プログラミングの詳細については、here's a link to the online documentationを参照してください。

+0

つまり、オブジェクトのメソッドではないときに、roll_dictがメソッドとして呼び出されています。 obj.roll_dice()の代わりにroll_dice()を試してください。 –

+0

それはうまくいくかもしれませんが、彼はroll_diceがクラスメソッドだと言っていますので、特定のオブジェクトで操作することを意図しています。 – gnovice

+0

あなたは正しかったが、今は別の問題がある。私はJavaやPHPのような言語から来ていますが、クラスを使うのはかなり簡単です。 self.roll_diceまたはthis.roll_diceに相当するものは何ですか? – farr

3

私は静的メソッドであるとroll_diceを宣言することでこれを回避することもできると信じています。

+0

+1:はい、roll_diceが静的メソッドの場合、obj.roll_diceは動作するはずです関数定義に入力引数を追加する必要はありません。 – gnovice

関連する問題