0

今、私が知る限り、obj.methodorを呼び出しmethod(obj)ても同じ結果が得られるようです。しかし、これらの場合に がどのように動作するかを確認しようとしたとき、subsref メカニズムを経由していないように見えるsubsrefという驚くべきことに気づきました。method(obj)では、これらの呼び出しはどのように処理され、それらをオーバーライドする実用的な方法はありますか?

私はこれをやろうとしているので、method(object).otherMethod可能なようなものを作ることができます(これは明らかにカスタムを通じて処理されますsubsref)。何か案は?

4

1 に答える 1

1

method(obj)事実上、関数methodon を呼び出すだけobjです。obj.methodを通過しsubsref、独自のカスタムを実装していない限り、同じ関数にファームアウトしますsubsref。「オーバーライド」の意味がわかりmethod(obj)ません。MATLAB ディスパッチ プロセスを別の方法で動作させることはできません。

ではなく、method(obj).otherMethod通常はtmp = method(obj); tmp.otherMethod.

subsref任意に深くネストされた複雑な式 (たとえば、of のような形をとる可能性がある) を処理する程度まで完全に再実装しようとすると、obj.property{1}.structfield(2).method.otherMethod物事は非常に速く非常に複雑になります。私は通常、小さなネストの深さだけを処理しようとし、それより深いものはすべて に渡しbuiltin('subsref')ます。

于 2013-03-05T13:25:34.410 に答える