2011-09-23 10 views
7

これを動作させるにはどうすればよいですか?評価[]がボタン[]内で機能していないようです。

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

結果:[1]、[2]、{6,6}

は、私が実際のタスクをtrivializingんだけど、目標はボタンがMapまたはTableまたは内部で何をするかを設定することで取得してください]をクリックしますParallelTable

助けてください!


EDITは最初のレベルで... Evaluate作品を、それを考え出しました。ここでは、それは深すぎます。だから私はReplaceRuleを使用:

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

[削除]を投稿してください。 y = {};表[ボタン[x、AppendTo [y、sub]] /。 sub - > x、{x、5}] 'を答えとして返します。 –

答えて

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] 

これらの技術を比較する別の例として、それらが適用されている私のポストhereを参照してくださいprobへ本体にパラメータを埋め込んだ純関数のリストを作成する(クロージャ)。

10

これはWithための仕事です。 Withは、任意の深さで、別の表現に評価された式を挿入するために使用されている - でもButtonにすぐに第二引数のように評価されていない表現の部分にこのような単純なケースでは

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

、何人かの人々 (私を含む)、したがって、両方WithTable変数に同一のシンボル(この場合x)を使用することを好む:

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

+1。現在の議論の接線ですが、このスレッドの投稿の一番下にあります:http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/thread/b07d6ff89313c70d、マクロは 'With [...] 'をラップすると、評価されていない式を強制的にその本文に挿入します。私はあなたがそれが面白いかもしれないと思ったので、ここで言及します。 –

+1

+1あなたの言葉のスコープの構造を説明するために(WRIのものではなく、十分明確ではない) –

0

Evaluateは最初のレベルでのみ動作します。ここでは、それは深すぎます。だから私はReplaceRuleを使用した:

Remove[sub]; y = {}; Table[ Button[x, AppendTo[y, sub]] /. sub -> x, {x, 5}] 
関連する問題