matlab では、すべてのクラス メソッドは、最初の引数がオブジェクト自体である通常のメソッドのように見えます。
このようなパラダイムは、クラスが参照によって渡されるため、python などの他の oop 言語ではまったく受け入れられます。一方、matlab は既定でオブジェクトを値渡しします (ハンドル クラスを除く)。
これらすべてから、最も単純なセッター関数 (またはその他のクラス メソッド) を使用すると、オブジェクト全体がコピーされると推測されます。
たとえば、以下は matlab のクラス メソッドのシグネチャです。
classdef foo
methods
function obj = set.myParam(obj,value);
function myfun(obj, value);
end
end
この場合、fooObj.myfun(5) (または単に myfun(fooObj,5)) を呼び出すと、matlab は fooObj=foo() 全体をコピーしますか?
これは信じられないほど大きなオーバーヘッドではありませんか? すべてのクラス メソッド (およびセッター) のオブジェクト全体をコピーすることは、非常に効率が悪いように思えます。
私は何かが恋しいですか?oopテクニックを使用しながら、matlabでこのような状況を回避する方法はありますか?
このようなパフォーマンスのオーバーヘッドを防ぐために、ハンドル クラスを使用する必要がありますか?