2016-09-17 154 views
1

給定一個字符串中符號的名稱,如何給一個值賦值多次?例如,假設我要定義一個符號,它的名字是varname的價值,我想給它分配一個值:如何給一個給定名稱的符號賦值一個字符串

varname = "foo" 
Symbol[varname]=5 

這並不工作,因爲數學會認爲你只是試圖將值分配給符號,這是受保護的。這將工作如果foo未定義:

Evaluate[Symbol[varname]]=5 

好的。但它不會工作第二次:

Evaluate[Symbol[varname]]=6 

當左側評估評估爲5和數學抱怨說,您要值6分配給原始對象5.我想訪問代碼左側的符號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

下面是幾個方法,處理字符串或變量名。

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

'克里斯'是的,謝謝第一個版本是我感興趣的名字是在一個字符串。它的工作原理是,「Clear」不僅可以使用變量名稱,而且可以在字符串常量中使用該名稱。 Alan和Alan提出的方法都是很好的解決方案,謝謝。 – nlmath

相關問題