我想列出一些可以初始化和访问的变量 在那种代码之后:
abc = {a, b, c}
{a, b, c} = {0, 0, 0}
abc[[1]] = 1
换句话说,我想创建一个变量列表,用零初始化它们,然后通过引用变量指示列表而不是使用单个变量的名称来更改它们。
如果你愿意的话
abc = {a, b, c}
Evaluate[abc[[1]]] = 1
你得到了正确的东西,即变量a被设置为1.但是在第一次设置之后,你不能使用上面的方法为该变量设置另一个值。
更多详情
我想创建SetterBars列表,其中每个都独立于其他人,我可以以某种方式存储他们的值。更重要的是我希望它们被初始化为零。像
abc = {a, b, c};
Evaluate[abc] = {0, 0, 0};
Table[SetterBar[Dynamic[ abc[[i]] ],{-1,1}], {i,3}]
答案 0 :(得分:1)
我确信这可以简化,但至少它确实有效:
{a, b, c} = {0, 1, 0};
{
With[{abc = {Unevaluated[a], Unevaluated[b], Unevaluated[c]}},
tab = Table[With[{abci = abc[[i]]},
SetterBar[Dynamic[abci], {0, 1}]], {i, 3}];
tab /. Dynamic[Unevaluated[x_]] :> Dynamic[x]
],
Dynamic[{a, b, c}]
}
答案 1 :(得分:1)
简单的答案是使用索引对象而不是符号:
x[_] = 0;
Array[SetterBar[Dynamic @ x @ #, {0, 1}] &, 3] // Row
Array[Dynamic @ x @ # &, 3]
您不仅限于用户数字索引。例如:
SetterBar[Dynamic @ x @ #, {0, 1}] & /@ {"one", "two", "three"}
Dynamic @ x @ # & /@ {"one", "two", "three"}
有关更完整的示例和其他选项,请参阅:Wrapping EventHandler by Table。
对于执行您描述的符号分配的方法,即使我不在此处推荐,请参阅:Assigning values to a list of variable names,以及:(1),(2),{{3 },(3)