3

初期化してアクセスできる変数のリストを作成したいと思います。
そのようなコードの後:

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}]
4

2 に答える 2

1

解決

簡単な答えは、シンボルではなくインデックス付きオブジェクトを使用することです。

x[_] = 0;

Array[SetterBar[Dynamic @ x @ #, {0, 1}] &, 3] // Row

Array[Dynamic @ x @ # &, 3]

Mathematica グラフィックス

ユーザー数値インデックスに限定されません。例えば:

SetterBar[Dynamic @ x @ #, {0, 1}] & /@ {"one", "two", "three"}

Dynamic @ x @ # & /@ {"one", "two", "three"}

参考文献

より完全な例とその他のオプションについては、Table による EventHandler のラッピングを参照してください。

ここではお勧めしませんが、説明したシンボル割り当てを実行する方法については、 変数名のリストへの値の割り当て、および(1)(2)(3)(4)を参照してください。

于 2012-12-08T13:17:07.587 に答える
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}]
        }
于 2012-12-06T11:19:31.597 に答える