関数ワークスペースの変数参照

조회 수: 38 (최근 30일)
Akihiko Ueda
Akihiko Ueda 2020년 2월 26일
댓글: Akihiko Ueda 2020년 2월 27일
関数ワークスペースの変数を参照する方法をご教示ください。
やりたいことは
関数でデータを読み込み、ベースワークスペースの値を書き換える、です。
現状実装したコードは以下です。
run('option.m');
funcWsName = who ('OP_*');
for j = 1:numel(funcWsName)
funcWsData = evalin('caller' ,funcWsName{j});
baseWsData = evalin('base' ,funcWsName{j});
baseWsData.Value = funcWsData.Value;
end
funcWsDataで関数ワークスペースの値を取得できるかなと思ったのですが、ベースが参照されていました。
asigninを使用する方法でも良いので、書き換える方法をご教示ください。
  댓글 수: 1
Akihiko Ueda
Akihiko Ueda 2020년 2월 27일
最適なやり方ではないと思いますが、一時的にファイルを作成して対応するようにしました。
run('option.m');
save('option.mat')
optionData = load('option.mat')
delete(option.mat);
funcWsName = who ('OP_*');
for j = 1:numel(funcWsName)
baseWsData = evalin('base' ,funcWsName{j});
baseWsData.Value = optionData.(funcWsName{j}).Value;
end
この方法でやりたいことはできましたので、クローズとします。
ご回答いただいた方、ありがとうございます。

댓글을 달려면 로그인하십시오.

답변 (1개)

Musashi Ito
Musashi Ito 2020년 2월 26일
편집: Musashi Ito 2020년 2월 26일
関数の出力引数で関数内の値を出力する方法はいかがでしょうか。関数を呼び出すスクリプトファイル側で、ベースワークスペースで扱っている変数名を関数の出力に指定して、上書きすれば簡単にできるかなと思います。
出力引数の数が多い場合は、構造体やテーブルのデータ型でデータを整理してから出力すればすぐできるかなと思います。
  댓글 수: 1
Akihiko Ueda
Akihiko Ueda 2020년 2월 27일
設計上、関数の出力引数として対応することが難しい、かつ変数名が固定ではないので提示頂いた方法では対応できないと考えております。
サンプルとして記述した「'option.m'」に関しても、実はループ内で対象のファイルを切り替えており、処理毎に書き換える変数を変えております。
該当のファイルで読み込んでいるのはVariantSubsystemの条件に該当する変数(定数)であり、モデルを切り替えながら処理を実施しようとしています。
そのため、関数ワークスペースでなく、ベースワークスペースに値を反映する必要があると考えております。
なので、関数内で関数ワークスペースの値を参照し、ベースワークスペースの値を「evalin」、もしくは「asignin」で書き換えたいと考えております。
※もしほかに方法があればその方法でも問題ありません。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Whos에 대해 자세히 알아보기

제품


릴리스

R2015a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!