如何在我的情况下不使用“eval”函数(日语)

4次浏览(最近30天)
gafakel
gafakel 2021年7月16日
评论道: gafakel2021年8月4日
お世話になっております。今,以下のコードを考えます。
= 1;b = 2;c = 3;
temp = [“一个”“b”“c”];
k = 1:3
mem。(临时(k)) = eval(临时(k));
结束
まず先に変数a, b, cを定義し,それと同じ名前をもつ構造体memをうまく定義する(このようにできることに気づいて感動しました)。それと同時に,構造体memに含まれるmem.XXという変数について,同じ名前の変数XXの値を代入する,という流れであります。なお自分の状況ではもっと変数が多いのですが,簡単のためこうしました。
ここでmatlabのヘルプや他の答案を見ると“Eval邪恶!”と言われているほど嫌われている/非推奨なEval関数ですが,上のような状況だとEvalを使わない形で実行できるのでしょうか吗?個人的に字符串として定義された文字“a”から,“値が1である変数の名前“一个に結びつける方法が見つからなかったため,質問させていただいた次第です。
なお上の場合は
mem.a =一个;mem.b = b;mem.c = c;
としてもいいのですが,実際には変数が数百あるためこれは厳しいと考えます(簡単にできる方法があるのでしょうか?)
よろしくお願いいたします。
3评论
gafakel
gafakel 2021年8月4日
対応が遅くなり失礼いたしました。独断と偏見ですが,今回は”(動作は遅くなるものの)変数名の定義が少ない回数で済むので楽”という観点から回答を選ばせていただきました。お二人とも,ご回答いただき誠にありがとうございました。

登录评论。

接受的答案

Toru Ikegami
Toru Ikegami 2021年7月19日
编辑:Toru Ikegami 2021年7月19日
ご質問の本質からずれた回答かもしれませんが,一旦。垫ファイルに保存して,ロードするというのはいかがでしょう。
= 1;b = 2;c = 3;
tmp = {“一个”“b”“c”};
保存(“hogehoge.mat”、tmp {:});
mem =负载(“hogehoge.mat”
2行目でセル配列に変数名を代入するところと,3行目の {:} で変数名をコンマ区切りリストに展開するあたりがミソでしょうか。
もちろん,ワークスペースにある変数全てを拾う場合には,単純に拯救コマンドと负载コマンドを使えば好です。ワークスペースを掃除して不要な変数を削除するのと,2行目のように変数名をセル配列に代入する式を書くのと,どちらか楽な方を選べばよいかと思います。
1评论
gafakel
gafakel 2021年7月21日
ご回答ありがとうございます。一旦垫ファイルに保存するという発想はありませんでした。確かにそこからロードしても良さそうです。为文ただこれをで回すときに,いちいち保存、负载を動かすと重くなる感じもあります……

登录评论。

答案(1)

疝的婴儿
疝的婴儿 2021年7月17日
编辑:疝的婴儿 2021年7月17日
一度细胞に格納してから,上記のようなコードに組み込めば解決できると思います。
clc,清楚,接近所有
= 1;b = 2;c = 3;
ここで一という细胞配列にそれぞれの数値を格納します。
一个= {A, b, c};
temp = [“一个”“b”“c”];
长度で繰り返しサイズを確認します。
num =长度(临时);
それぞれの细胞要素内の数字を当てはめていきます。
k = 1: num
mem。(临时(k)) = {k};
结束
以下のように組み込まれます
mem
mem =结构体字段:
A: 1 b: 2 c: 3
2的评论
gafakel
gafakel 2021年7月21日
ご回答ありがとうございます。確かに解決できそうですね。ただその場合,初めからセル行列一个のところで処理を終わっていい(そこからmemを作るのではなく,セル行列一个を変数memとして扱っていい)感じもしました。

登录评论。

类别

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!