オブジェクトX
がクラスMyClass
であるとします。 MyClass
にはメソッドcompute
があり、U = compute(X,...)
を呼び出すと、matlabは自動的にクラスメソッドを呼び出します。しかし、私が実際に欲しいのは、と呼ばれる別の関数を呼び出すことです。パラメータはMyClass
オブジェクトで始まります。どのように私はmatlabにクラスメソッドに入るのではなく、この通常の関数を呼び出させるのですか?matlabに過負荷がかかった場合、matlabにクラスメソッドではなく通常の関数を呼び出させる方法はありますか?
答えて
これを行うには、関数の名前または場所を変更せずにこれを行う方法はありません。 Matlab's function precedence orderをチェックすると、メソッドは常に通常の外部関数の前に実行されます。唯一の実用的なオプションは次のとおりです。
- 機能の名前を変更します。
- 関数を呼び出すのと同じスクリプトに移動します(上のリストの項目4)
- 関数の.mファイルを、スクリプトファイルと同じフォルダ内の
private
というフォルダに移動しますリスト)
UPDATE
小規模なプロジェクトのために非常に実用的ではないが、あなたはまた、packaging your functionsに見てみたいことがあります。良い議論はthis SO postにあります。
あなたcompute
は、MATLABの組み込みであることを起こる場合は、あなたがそうでなければ
builtin('compute', ...)
を使用することができ、方法はありません - ビーの答えを参照してください。
良い点。私は 'compute'関数がカスタムオブジェクトを最初のパラメータとして受け入れるので、それは組み込み関数ではないと仮定しました。 – Bee
@Bee:true。おそらく、OPは内部を扱っていない。しかし、他の誰かが: –
これが必然的に必要な場合は、次のようなことができます。私は強くお勧めしません、とビーの答えに固執する。しかし、時には1つも選択肢がありません。
考え方は、インスタンスを別のクラスにラップして、MATLABの関数ディスパッチでcompute
メソッドが表示されないようにすることです。ただし、compute
関数では、ラップされたインスタンスは元のインスタンスと同じに見える必要があります。これは、いくつかのケースで権利を取得するためにトリッキーですが、多くの場合、次は十分です:
classdef Wrapper
properties (Access = 'private', Hidden = true)
core = [];
end
methods
function this = Wrapper(core)
this.core = core;
end
function varargout = subsref(this, S)
if nargout > 0
varargout = cell(1, nargout);
[varargout{:}] = subsref(this.core, S);
else
subsref(this.core, S);
end
end
end
end
このクラスは、すべてが包まれたインスタンスへの読み取りアクセスを別のクラスとデリゲートのインスタンスをラップします。例えば
、あなたがファイルを持っている場合TestClass.m
呼ば:
classdef TestClass
properties
name = '';
end
methods
function this = TestClass(name)
this.name = name;
end
function compute(this)
fprintf('Instance method! My name is "%s".\n', this.name);
end
end
end
と機能compute.m
:内容に応じて
>> t = TestClass('t');
>> s = struct('name', 's');
>> compute(t)
Instance method! My name is "t".
>> compute(s)
Regular function! My name is "s".
>> w = Wrapper(t);
>> compute(w)
Regular function! My name is "t".
:
function compute(x)
fprintf('Regular function! My name is "%s".\n', x.name);
end
そして、それはこのように動作しますcompute
関数はあなたのインスタンスでmiを行いますWrapper
にさらに特別な機能を追加する必要があります(例: subsasgn
)。また、compute
がいくつかのメタクラス - マジックを行うと、これは壊れます。
- 1. C++からMatlab関数を呼び出す方法
- 2. 以下の過負荷解決がテンプレート以外の関数を呼び出すのはなぜですか?
- 3. Matlab内でMathematica関数を呼び出す方法は?
- 4. Matlabでさまざまなパラメータの関数を呼び出す
- 5. onloadまたはdocument.readyですでに呼び出されている場合、Javascript内の関数を呼び出す方法はありますか?
- 6. Pythonクラスメソッド - 呼び出しを短くする方法はありますか?
- 7. JAVAプログラムから呼び出されるMATLAB関数のデバッグ
- 8. Androidアプリケーションの場合、Hibernateは過度の負荷ですか?
- 9. MATLABにはPythonの範囲関数がありますか?
- 10. バックグラウンド画像に負荷がかかっていない場合は代替の背景があります
- 11. 関数(param)が呼び出された場合、unbeforeunload呼び出しをウィンドウにバインドする方法は?
- 12. Dll関数の呼び出しは、通常の関数呼び出しより速いですか?
- 13. この関数は過負荷ですか?
- 14. ExternalInterfaceからJavascriptクラスメソッドを呼び出す方法はありますか?
- 15. 私が特定できなかったmatlab関数の誤り
- 16. MATLABの検索パスの前の別の関数でシャドーされている関数を呼び出す方法はありますか?
- 17. 関数listoffは常に呼び出していますが、タイマーが期限切れになった後に呼び出される必要があります。
- 18. には、opencvのmatlab bwboundariesに似た関数がありますか?
- 19. PythonからMatlab関数を呼び出す
- 20. Javaからmatlabコールバック/関数ハンドルを呼び出す
- 21. ない方法[負荷] [スーパー・ロード]を呼び出す必要が
- 22. 図が表示された直後に関数を呼び出すMatlab
- 23. MATLABからJavaコードを呼び出す、同期させる
- 24. Std :: findを呼び出す関数はありませんか?
- 25. jquery基本関数が呼び出されるたびに関数を呼び出す方法はありますか?
- 26. Pythonでクラスがロードされた後に関数を呼び出す方法はありますか?
- 27. Matlabから複数の出力を持つC++関数を呼び出す方法は?
- 28. 通常の関数からの仮想関数呼び出し
- 29. redisに過負荷がかかるとどうなりますか?
- 30. Pythonでは、関数を呼び出す前に関数が "ジェネレータ関数"であるかどうかをチェックする方法はありますか?
両方のバージョンがメンバーメソッドでない理由は何ですか? 'MyClass.compute(x)'と 'compute(x)'の両方を呼び出すこともできます。 – Amro