5

クラス定義 ( ) を含む単一の Matlab ソース ファイル (m ファイル) があるclassdef場合、m ファイルを実行する場合に実行される特定のコード セットを指定する方法はありますか? RunIDE のボタン、シェル、または Matlab コマンドラインなどから、ファイル全体を意味します。実行するコードを手動で選択するという意味ではありません。

main静的メソッドを使用する Java や、クラス定義の外側 (おそらくif __name__==__main__ブロック内)にコードを配置することにより、同様の動作が Python に存在します。

4

2 に答える 2

3

短い答えは「いいえ」です。MATLAB classdef M-ファイルは、完全なプログラムを形成するのではなく、オブジェクトを定義することだけを目的としています。

長い答えは、たとえば、「変数のように振る舞うか」または「プログラムのように振る舞う」かどうかを指定するフラグを取るためにコンストラクターをオーバーロードすると、classdef 関数から特定の動作を取得できる可能性があるということです。

例えば

classdef myClass
...
methods  
    function self = myClass(varargin)
       if nargin == 1 && strcmpi(varargin{1},'run')
          ..... %run the program
       else
          ..... %make the variable

または、main という静的メソッドを作成することもできます。

   methods (Static = true)
       function main()
          %enabes: myClass.main()
          ...
       end

IDE は、M ファイルを「実行」するために何をすべきかまだわかりませんが、コマンド ラインまたは別の M ファイルから適切に実行できます。

その最後の文は 100% 正しいわけではありません - Egon が以下で指摘したように、MATLAB の IDE でそのコードを実行することができます - 「実行構成」を使用します: http://www.mathworks.com/help/matlab/matlab_prog/run-functions -in-the-editor.html

于 2012-12-10T15:02:26.240 に答える
2

これを行うにはいくつかの方法があります。

  • 「実行構成」を (スクリプトまたは特定のコード行として)作成できます。これは、ファイル内から実行ボタンをクリックする (または実行ショートカットを押す) たびに実行されclassdefます。大きな欠点は、これらの実行構成がローカルに保存されることです。そのため、コラボレーションや複数の場所での作業に関しては悪夢です。個人的には、実行構成が複雑な場合はスクリプトを作成することをお勧めします。私のものは、もちろん、実行したいクラスのtestMyClass場所でほとんど呼び出されます。MyClass

  • 複雑なコードが必要ない場合は、オブジェクトのコンストラクターにすべてを配置することもできます。で引数が渡されていないかどうかを確認するとif nargin == 0 ... end、クラス ファイルを「実行」するたびにそのコードが呼び出されます。ただし、注意を怠ると、無限ループまたは作成中のオブジェクトの無限チェーンが作成される可能性があるため、できることは多少制限されます。最終的に、ベース ワークスペースにオブジェクトだけが作成されます。

  • より複雑なコードや、ベース ワークスペース内でいくつかの変数を作成するコードが必要な場合は、それを実行できますが、多大なコストがかかります。コードが完全に混乱する可能性があるため、よほどの理由がない限り、これを使用しないことをお勧めします。前の方法と邪悪な関数evalinを使用assigninして、ベース ワークスペース内の変数を評価して割り当てることができます。

于 2012-12-10T18:47:37.040 に答える