MATLAB の無名関数で複数のステートメントを実行するにはどうすればよいでしょうか? 質問する

MATLAB の無名関数で複数のステートメントを実行するにはどうすればよいでしょうか? 質問する

次のようなことをしたいです:

>> foo = @() functionCall1() functionCall2()

だから私はこう言ったのです。

>> foo()

を実行してfunctionCall1()から を実行しますfunctionCall2()。(私は次のようなものが必要だと感じていますC 、演算子

編集:

functionCall1functionCall2必ずしも値を返す関数ではありません。

ベストアンサー1

m ファイルに関数を保存せずにコマンド ライン経由ですべてを実行しようとすると、複雑で面倒な作業になる可能性がありますが、私が思いついた方法が 1 つあります...

まず、匿名関数そして彼らのハンドルセル配列:

fcn1 = @() ...;
fcn2 = @() ...;
fcn3 = @() ...;
fcnArray = {fcn1 fcn2 fcn3};

...または、関数がすでに定義されている場合 (m ファイルなど)、次のように関数ハンドルをセル配列に配置します。

fcnArray = {@fcn1 @fcn2 @fcn3};

次に、組み込み関数を使用して配列内の各関数を呼び出す新しい匿名関数を作成できます。cellfunそしてfeval:

foo = @() cellfun(@feval,fcnArray);

見た目はおかしいですが、効果はあります。

編集:関数をfcnArray入力引数で呼び出す必要がある場合は、まず配列内のすべての関数に同じ数の入力が必要であることを確認する必要があります。その場合、次の例は、関数の配列をそれぞれ 1 つの入力引数で呼び出す方法を示しています。

foo = @(x) cellfun(@feval,fcnArray,x);
inArgs = {1 'a' [1 2 3]};
foo(inArgs);  %# Passes 1 to fcn1, 'a' to fcn2, and [1 2 3] to fcn3


警告の言葉:ドキュメントcellfunは、注文出力要素が計算される順序は指定されておらず、依存すべきではありません。つまり、またはfcn1の前に が評価される保証はありません。順序が重要な場合は、上記のソリューションを使用しないでください。fcn2fcn3

おすすめ記事