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

11 ビュー (過去 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 Center および File Exchangeワークスペース変数と MAT ファイル についてさらに検索

製品


リリース

R2015a

Community Treasure Hunt

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

Start Hunting!