最近では、変数名がパス内のMATLAB関数名と同じ名前であれば、呼び出し元関数に新しい変数を作成する関数でassignin('caller',...)
を呼び出すと、matlabコードに問題が見つかりました。matlabの変数名前空間
ここでは、問題を示すための簡単なコードスニペットを示します。
function myfunctest
sin = 0;
subfcn_set; % call subfcn_set to make a new variable
whos % list variables in current workspace
sin % raise error because it calls the sin function
end
function subfcn_set
assignin('caller', 'sin', 'I am sine');
end
myfunctest.m
にスニペットを保存して、MATLABで
>> myfunctest
Name Size Bytes Class Attributes
sin 1x9 18 char
sin =
I am sine
を、それを実行するすべてがよさそうです。私はmyfunctest
でsin = 0
を削除して、もう一度それを実行した場合でも、
>> myfunctest
Name Size Bytes Class Attributes
sin 1x9 18 char
Error using sin
Not enough input arguments.
Error in myfunctest (line 8)
sin
組み込みsin
関数は、変数sin
がwhos
によって示されるように存在していても呼ばれています。これはパス内の他のMATLAB関数名にも当てはまります。
変数名をsin
から別のもの(たとえばnotafunc
)に変更すると、初期化に関係なくすべてが良好に見えます。
>> myfunctest
Name Size Bytes Class Attributes
notafunc 1x13 26 char
notafunc =
I am notafunc
Matlabパス上の関数と名前を共有するすべての変数には、シンボルを変数として使用していることをコンパイラに知らせるための明示的な割り当てが必要です。同様の質問[ここ](http://stackoverflow.com/questions/26412276/puzzling-error-with-script-run-in-function/26414381#26414381)に回答してください。 – TroyHaskin
はい、答えはポイントです。その投稿は直接関連していないように見えますし、検索で見つけられませんでした。 – Lee