7

これを機能させる方法はありますか?

y = {}; Table[Button[x, AppendTo[y, Evaluate[x]]], {x, 5}]

結果:[ 1]をクリックし、[]をクリックし2て、取得します{6,6}

私は実際のタスクを簡単にしていますが、目標はボタンがaMapまたはaTableまたはの内部で何をするかを設定することParallelTableです。

助けてください!


編集
それを理解しました...Evaluate最初のレベルでのみ機能します。ここでは、深すぎます。だから私は使用しましたReplaceRule

Remove[sub]; y = {}; Table[Button[x, AppendTo[y, sub]] /. sub -> x, {x, 5}]
4

3 に答える 3

10

これはの仕事ですWithWith評価された式を別の式に任意の深さで挿入するために使用されます。式の2番目の引数のようにすぐに評価されない部分にも挿入されますButton

y = {}; Table[With[{x = i}, Button[x, AppendTo[y, x]]], {i, 5}]

このような単純なケースでは、一部の人々(私自身を含む)は、変数と変数xの両方に同じ記号(この場合)を使用することを好みます。したがって、次のようになります。WithTable

y = {}; Table[With[{x = x}, Button[x, AppendTo[y, x]]], {x, 5}]
于 2011-09-23T04:21:59.170 に答える
5

置換ルールと純粋関数は、の簡潔な代替手段を提供しWithます。例えば:

y={}; Range[5] /. x_Integer :> Button[x, AppendTo[y, x]]

また

y = {}; Replace[Range[5], x_ :> Button[x, AppendTo[y, x]], {1}]

また

y = {}; Array[Button[#, AppendTo[y, #]] &, {5}]

また

y = {}; Button[#, AppendTo[y, #]] & /@ Range[5]

これらの手法を比較する別の例については、ここにある私の投稿を参照してください。ここでは、パラメーターが本体(クロージャ)に埋め込まれている純粋関数のリストを作成する問題に適用されています。

于 2011-09-23T22:56:06.317 に答える
0

Evaluate最初のレベルでのみ機能します。ここでは、深すぎます。だから私は使用しましたReplaceRule

Remove[sub]; y = {}; Table[ Button[x, AppendTo[y, sub]] /. sub -> x, {x, 5}] 
于 2011-09-27T16:37:42.220 に答える