如何为给定字符串中名称的符号赋值

Posted

技术标签:

【中文标题】如何为给定字符串中名称的符号赋值【英文标题】:How to assign a value to a symbol given the name in a string 【发布时间】:2016-09-17 17:10:07 【问题描述】:

给定字符串中的符号名称,如何多次为其赋值?例如,假设我想定义一个符号,其名称为varname 的值,并且我想为它分配一个值:

varname = "foo"
Symbol[varname]=5

这不起作用,因为 Mathematica 认为您正在尝试为 Symbol 分配一个值,该值是受保护的。如果 foo 未定义,这将起作用:

Evaluate[Symbol[varname]]=5

好的。但是第二次就不行了:

Evaluate[Symbol[varname]]=6

当评估左侧时,它评估为 5,并且 Mathematica 抱怨您试图将值 6 分配给原始对象 5。我想访问分配左侧的符号 foo,不是foo 的值。这个可以吗?

提前感谢您提供的任何帮助。

【问题讨论】:

ToExpression Alan -- 谢谢。我在发布之前查看了ToExpression,但它一直在评估它试图分配一个值的点。我使用ToExpressionHold 作为可选参数找到了答案。此外,这对(1) 很有帮助。稍后我会发布更多内容。 `varname = "foo"; ToExpression[varname "=5"];富 Alan -- 是的,谢谢,毕竟这会起作用。我在右侧使用 Evaluate,这需要 Hold 参数。你的方法更简单更好,谢谢。 【参考方案1】:

这里有几个方法,可以处理字符串或变量名。

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

【讨论】:

Chris 是的,谢谢第一个版本是我感兴趣的名称在字符串中的位置。它之所以有效,是因为Clear 不仅可以获取变量名,还可以获取字符串常量中的该名称。这和艾伦建议的方法都是很好的解决方案,谢谢。

以上是关于如何为给定字符串中名称的符号赋值的主要内容,如果未能解决你的问题,请参考以下文章

如何为C中的字符串数组赋值?

Spring Integration Java DSL:如何使用 channelMapping 方法路由到标题中名称的通道?

如何为类赋值并创建json

如何为包含文档中标题名称的电子邮件创建邮件合并模板?

excel 如何为列添加指定内容(字符串)

如何为每(数)毫秒运行一次的游戏制作“循环”?