2011-09-23 70 views
7

内工作任何想法如何让这个工作?评估[]似乎无法在按钮[]

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

结果:单击[1],点击[2],得到{6,6}

我轻视实际的任务,但我们的目标是建立内部的按钮做什么MapTableParallelTable

请帮忙!


编辑
只在第一级想通了... Evaluate作品。这里太深了。所以我用ReplaceRule

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

请发帖'删除[sub]; 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,如果它们被到概率创建一个嵌入参数(闭包)中的参数的纯函数列表。

10

这是With工作。 With用于插入一个计算表达式到任何深度的另一种表达方式 - 即使到未评估马上喜欢的第二个参数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}] 
+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}]