質問: how to not to use “eval” function in my case(japanese) お世話になっております。今、以下のコードを考えます。 a=1; b=2; c=3; temp=["a","b","c"]; for k=1:3 mem.(temp(k))=eval(temp(k)); end まず先に変数a,b,cを定義し、それと同じ名前をもつ構造体memをうまく定義する(このようにできることに気づいて感動しました)。それと同時に、構造体memに含まれるmem.xxという変数について、同じ名前の変数xxの値を代入する、という流れであります。なお自分の状況ではもっと変数が多いのですが、簡単のためこうしました。 ここでmatlabのヘルプや他のanswersを見ると"eval is evil !"と言われているほど嫌われている/非推奨なeval関数ですが、上のような状況だとevalを使わない形で実行できるのでしょうか?個人的にstringとして定義された文字"a"から、「値が1である変数の名前」aに結びつける方法が見つからなかったため、質問させていただいた次第です。 なお上の場合は mem.a=a; mem.b=b; mem.c=c; としてもいいのですが、実際には変数が数百あるためこれは厳しいと考えます(簡単にできる方法があるのでしょうか?) よろしくお願いいたします。
回答: ご質問の本質からずれた回答かもしれませんが,一旦.mat ファイルに保存して,ロードするというのはいかがでしょう. a = 1; b = 2; c = 3; tmp = {'a','b','c'}; save('hogehoge.mat',tmp{:}); mem = load('hogehoge.mat') 2行目でセル配列に変数名を代入するところと,3行目の{:} で変数名をコンマ区切りリストに展開するあたりがミソでしょうか. もちろん,ワークスペースにある変数全てを拾う場合には,単純にsaveコマンドとload コマンドを使えばokです.ワークスペースを掃除して不要な変数を削除するのと,2行目のように変数名をセル配列に代入する式を書くのと,どちらか楽な方を選べばよいかと思います.