3

標準的な方法で宣言された、可変引数を持つ関数があります。

[] = foo ( varargin )

別の関数から呼び出したいのですが、プログラムで引数を指定します。私の最善の試みは次のようなものです。

% bar isn't populated like this, but this is how it ends up
bar = { 'var1' 'var2' 'var3' }; 
foo( bar );

ただし、barは1x1セル配列に配置され、意図したように1x3セル配列として解釈されません。fooを変更できないので、回避策はありますか?

4

2 に答える 2

10

変数、、がaありbcどこかにまとめて、最終的に一連の入力として関数に渡したい場合は、次のようにすることができます。

inArgs = {a b c};  % Put values in a cell array
foo(inArgs{:});

構文は、セル配列からすべての値をコンマ区切りのリストinArgs{:}として抽出します。したがって、上記はこれと同等です。

foo(a,b,c);

が可変長引数リストfooを受け入れるように記述されている場合、変数は1行3列のセル配列になり、各要素は個別の入力引数を格納します。基本的に、変数とまったく同じように見えます。の呼び出しで演算子を使用しなかった場合:vararginvarargininArgsfoo{:}

foo(inArgs);

その場合、varargin変数は1行1列のセル配列になり、最初の要素自体がセル配列になりinArgsます。つまり、foo入力は1つだけです(1行3列のセル配列)。

于 2009-07-15T14:36:53.870 に答える
0

私が知っている唯一の方法は使用することですがeval、ここにはMATLABがないため、構文を正しくチェックできません。

バーをフォームの文字列に強制すると、次の"'var1', 'var2', 'var3'"ことができます。

eval(["foo(", barString, ")"])

それがうまくいくことを願って、申し訳ありませんが、それは包括的な答えではありません。

于 2009-07-15T14:37:40.857 に答える