如何给字符串中给定名称的符号赋值
How to assign a value to a symbol given the name in a string
给定字符串中符号的名称,如何多次为其赋值?例如,假设我想定义一个名称为 varname
值的符号,并且我想给它赋值:
varname = "foo"
Symbol[varname]=5
这行不通,因为 Mathematica 认为您正在尝试为受保护的 Symbol 赋值。如果 foo
未定义,这将起作用:
Evaluate[Symbol[varname]]=5
好的。但是第二次就不行了:
Evaluate[Symbol[varname]]=6
当计算左侧时,它的计算结果为 5,而 Mathematica 抱怨您正试图将值 6 赋给原始对象 5。我想访问左侧的符号 foo
赋值,而不是 foo
的值。这能做到吗?
在此先感谢您提供的任何帮助。
这里有几个方法,可以处理字符串或变量名。
i = Function[{f, g}, Clear[f]; Evaluate@Symbol[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
给定字符串中符号的名称,如何多次为其赋值?例如,假设我想定义一个名称为 varname
值的符号,并且我想给它赋值:
varname = "foo"
Symbol[varname]=5
这行不通,因为 Mathematica 认为您正在尝试为受保护的 Symbol 赋值。如果 foo
未定义,这将起作用:
Evaluate[Symbol[varname]]=5
好的。但是第二次就不行了:
Evaluate[Symbol[varname]]=6
当计算左侧时,它的计算结果为 5,而 Mathematica 抱怨您正试图将值 6 赋给原始对象 5。我想访问左侧的符号 foo
赋值,而不是 foo
的值。这能做到吗?
在此先感谢您提供的任何帮助。
这里有几个方法,可以处理字符串或变量名。
i = Function[{f, g}, Clear[f]; Evaluate@Symbol[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