7

知道如何让它工作吗?

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

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

我正在简化实际任务,但目标是设置按钮在 aMap或 a Tableor中的作用ParallelTable

请帮忙!


编辑
想通了...Evaluate仅在第一级有效。这里,太深了。所以我用ReplaceRule

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

3 回答 3

10

这是一份工作WithWith用于将已评估的表达式插入到任何深度的另一个表达式中 - 甚至插入到未立即评估的部分表达式中,例如 的第二个参数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]

有关比较这些技术的另一个示例,请参阅我的帖子here,它们被应用于创建纯函数列表的问题,其中参数嵌入在它们的主体(闭包)中。

于 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 回答