次のようなことをしたいです:
>> foo = @() functionCall1() functionCall2()
だから私はこう言ったのです。
>> foo()
を実行してfunctionCall1()
から を実行しますfunctionCall2()
。(私は次のようなものが必要だと感じていますC 、演算子)
編集:
functionCall1
functionCall2
必ずしも値を返す関数ではありません。
ベストアンサー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
の前に が評価される保証はありません。順序が重要な場合は、上記のソリューションを使用しないでください。fcn2
fcn3