2016-09-17 2 views
1

文字列内のシンボルの名前を与えられたら、どのようにして値を複数回割り当てることができますか?例えば、私はその名前varnameの値であるシンボルを定義したいと、私はそれに値を代入したい:文字列内に名前が与えられたシンボルに値を割り当てる方法

varname = "foo" 
Symbol[varname]=5 

Mathematicaはあなたがシンボルに値を代入しようとしていると考えているため動作しません、保護されています。これは、fooが未定義の場合に機能します:

Evaluate[Symbol[varname]]=5 

しかし、それは二度目に動作しません。

Evaluate[Symbol[varname]]=6 

左側が評価されると、それは5に評価し、Mathematicaはあなたが私がアクセスしたい生対象5に値6を代入しようとしていると文句を言い代入の左側にあるfooのシンボルではなく、fooの値です。これはできますか?

お手数ですがお寄せいただきありがとうございます。

+0

'ToExpression'を参照してください。 – Alan

+0

「アラン」 - ありがとう。私は投稿する前に 'ToExpression'を見ましたが、それは値に割り当てようとしているところまで評価し続けました。オプション引数として 'Hold'を使って' ToExpression'を使って答えを見つけました。また、これは役に立ちました[(1)](http://mathematica.stackexchange.com/questions/2926/mapthread-gives-different-results-from-toexpression-when-trying-to-assign-variab)。私は後で詳しく説明します。 – nlmath

+1

'varname =" foo "; ToExpression [varname <> "= 5"]; foo – Alan

答えて

0

ここには、文字列または変数名のいずれかを処理する2つの方法があります。

i = Function[{f, g}, Clear[f]; [email protected][f] = g]; 
i["foo", 5]; 
foo 
i["foo", 6]; 
foo 
5 
6 
h = Function[{f, g}, f = g, {HoldFirst}]; 
h[foo, 5]; 
foo 
h[foo, 6]; 
foo 
5 
6 
+0

'Chris'はい、ありがとうございました。最初のバージョンは、名前が文字列のどこにあるのか興味があったものです。 'Clear'は変数名だけでなく文字列定数の中のその名前も取ることができるからです。これとAlanによって提案された方法はどちらも良い解決策です。ありがとうございます。 – nlmath

関連する問題