一連の変数を含むワークスペースがあります (例: 、var1
、var2
、var3
、var4
およびvar5
) 。.m 関数があります ( to の既定値を格納するために使用します。ユーザーは、変数とその既定値をワークスペースに追加するために、Matlab を開いてこの関数を実行します。その後、ユーザーはいくつかの変数の値を変更する可能性があります。またはいくつかの変数を削除することさえできます。var6
var7
assignin('base',...)
var1
var7
ここで、ユーザーが変数値を変更し、関数を再度実行した場合、ユーザーが入力した新しい値をデフォルト値で上書きしたくありません。
ここに私がこれまでに持っているもの:
S = evalin('base','whos');
listWorkspaceVar = {S.name};
compareCellArrayList = ismember(listWorkspaceVar, listParam); % logical vector, listParam is the list of variables in the function assigning the default values, so here listParam would be = {'var1' 'var2' 'var3' 'var4' 'var5' 'var6' 'var7'})
if any(compareCellArrayList) % check if there is at least one declared variable in the base workspace
tempWorkspaceVarVal = cell(sum(compareCellArrayList),2); % Pre-allocating, 1 column for the variable name and 1 column for the variable value
jj = 1;
for ii = 1:size(S,1)
if compareCellArrayList(1, ii)
tempWorkspaceVarVal(jj,:) = {listWorkspaceVar{1, ii}, ...
evalin('base',listWorkspaceVar{1, ii})};
jj = jj + 1;
end
end
theDefaultValueFunction() % The function that assignin the default values
cellfun(@(x,y) assignin('base', x, y), ...
tempWorkspaceVarVal(:,1), tempWorkspaceVarVal(:,2)) % Overwrite with the temp values in order to keep the new entered values
end
関数 assignin のデフォルト値を変更したくない場合、新しく変更された変数値を保持するのに最適な方法はありますか?