2016-07-26 8 views
1

オブジェクトのプロパティを変更する関数を呼び出す場合は、関数内にobj.propertyを使用する以外に、自己参照する別の方法がありますか?Matlabクラスで自己参照するためのよりクリーンな方法がありますか?

例(Javaなど他の言語で):

public void doSomething(int arg) 
    foobar = arg; 
end 

しかしMATLABに例:複数のプロパティで

classdef Foo < handle 
    properties 
     foobar = 0; 
    end 
    methods 
     function obj = Foo(arg) 
      if nargin > 0 
       obj.foobar = arg; 
      end 
     end 
     function doSomething(obj, arg) 
      obj.foobar = obj.foobar + arg; % Needed to reference the current object 
     end 
    end 
end 

、それはすべて「OBJを書くことから厄介見て開始することができます。 "
私は、" .0。 "という文字を使用している人もいますが、より良い方法があるかどうかは疑問でした(obj。)これは唯一のオプションですか?

ありがとうございます!

答えて

1

これは唯一のオプションです。最初の引数としてobjを渡す必要があります。なぜなら、matlabは "動的ディスパッチ"を使って適切なバージョンの関数を選択するからです。私。 2つのクラスがあり、両方ともdoSomething関数を定義している場合、matlabは最初の引数の型に基づいて適切なバージョンを呼び出します。このため、メンバー関数の最初の引数(コンストラクタを除く)は常にオブジェクトそのものである必要があります。

Javaでは、解釈された言語ではなく、コンパイルされた言語であるため、まったく異なるものが起こっています。多型などの場合があります。

だからいいえ。ショートカットはありません。これは、MATLABクラスの動作方法です。

+0

ありがとうございます!ありがとう! :) – oppnahar

+0

あなたのクラスが 'handle'から継承しなかった場合、あなたのオブジェクトを '変更'しようとする関数は、古いオブジェクトを上書きするために新しいオブジェクトを返すことによってのみ行うことができます。 'obj = doSomething(obj、args)'を実行できます。ですから、あなたが「参照渡し」できるように 'handle'を継承していることは、すでに「チート」です。 –

関連する問題