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

32 views (last 30 days)
Akihiko Ueda
Akihiko Ueda on 26 Feb 2020
Commented: Akihiko Ueda on 27 Feb 2020
関数ワークスペースの変数を参照する方法をご教示ください。
やりたいことは
関数でデータを読み込み、ベースワークスペースの値を書き換える、です。
現状実装したコードは以下です。
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 Comment
Akihiko Ueda
Akihiko Ueda on 27 Feb 2020
最適なやり方ではないと思いますが、一時的にファイルを作成して対応するようにしました。
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
この方法でやりたいことはできましたので、クローズとします。
ご回答いただいた方、ありがとうございます。

Sign in to comment.

Answers (1)

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

Sign in to comment.

Products


Release

R2015a

Community Treasure Hunt

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

Start Hunting!