评估[]似乎无法在Button []内部工作

时间:2011-09-23 03:07:19

标签: wolfram-mathematica mathematica-8

知道如何让它发挥作用吗?

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

3 个答案:

答案 0 :(得分:10)

这是With的工作。 With用于将已计算的表达式插入到任何深度的另一个表达式中 - 甚至是表达式中未立即评估的部分,如Button的第二个参数:

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

在这种简单的情况下,某些人(包括我自己)更喜欢对xWith变量使用相同的符号(在这种情况下为Table),因此:< / p>

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

答案 1 :(得分: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,其中它们适用于创建纯函数列表的问题,其中包含嵌入在其主体中的参数(闭包)。

答案 2 :(得分:0)

Evaluate仅适用于第一级。在这里,它太深了。所以我使用了ReplaceRule

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