2016-05-03 11 views
3

私はMicrosoftの開発者ですが、MATLABのコードとデザインを手助けしようとしています。私はクラス定義の構文と使い方を理解するのに苦労しています。これまで単純なMATLABクラスの定義

コード:

classdef Person 

    properties 
     Name 
    end 

    methods 

     function obj = Person(aName) 
      obj.Name = aName; 
     end 

     function ret = IsGraeme(obj) 
      if STRCMP(obj.Name , 'Graeme') 
       ret= 1; 
      else 
       ret= 0; 
      end 
     end 
    end 
end 

は今、私は私の使用量は以下に類似していることを期待:最後の行は1を返すと

graeme = Person('Graeme'); 
graeme.IsGraeme(); 

エラーでの使用の結果の最初の行は:

Too many inputs

私はMATLAB上で発見したサンプルは、あなたのclassdefではなく、使用量を与えるように見えます。

私は誰かがこの簡単な例を修正して、それを続けていくことができれば幸いです。 (言いましたが、私は経験豊かな開発者です。この言語ではない!)。

UPDATE 1:

のMATLAB 2013bを使用しました。

正確な使用方法と結果のエラー以下:

>> gt = Person('Graeme') 
Error using Person 
Too many input arguments. 
+0

あなたのコードをコピー&ペーストし、 'STRCMP'を' strcmp'に変更すると(MATLABは大抵の場合大文字小文字を区別します!まったく同じコードスニペットを使用していますか? MATLABのどのバージョンとオペレーティングシステムを使用していますか? – hbaderts

+0

Windowsで2013bを使用しています。7.机に戻ったときにケースを変更しようとします。迅速な返信をありがとう。 – GinjaNinja

+0

STRCMPをstrcmpに変更してもこの作業が行われないことが確認されました。 – GinjaNinja

答えて

2

OPのソリューションは、MATLABでclearコマンドを実行することになりました。おそらく、起こったことは、古いクラス定義がすでにメモリに格納されていて何らかの理由で自動的に更新されなかったことです。とにかく - 簡単な修正!

ただ、クラスのコンストラクタの最も簡単な基礎の説明... MATLABで

が、あなたは、あなたが示したアプローチをコンストラクタ関数のないクラスのインスタンスをたどることができるかこの質問につまずくケース他でhereは、以下に要約:

>> gt = Person(); 
>> gt.Name = 'Graeme'; 
>> gt.IsGraeme(); 

をOPは、彼が初期化時にクラスオブジェクトのプロパティに値を割り当てることができるようにコンストラクタを作りたかったのです。ただ、明確さのために、コンストラクタは次のとおりです。

a method having the same name as the class.

は、以下のコード(OPのユースケース合わせて変更)を本質的hereからコピーされます。ここでの唯一の違いは、私たちが最初にインスタンス化されたクラスオブジェクトのプロパティに(潜在的に未定義の)値を代入しようとする前に、入力値が提供されているかどうかを確認することです:今

function gt = Person(aName) 
    if nargin > 0 % Check if more than 0 arguments are provided 
     gt.Name = aName; % Assign input argument to property 
    end 
end 

(以前のように)、 gt = Person('Graeme')は期待通りに動作します。これは明らかにクラスが適切に名前がつけられたMファイルに保存されていて、以前の変数割り当ての誤りを取り除くためにclearを実行したことを前提としています。

関連する問題