知道如何让它发挥作用吗?
y = {}; Table[Button[x, AppendTo[y, Evaluate[x]]], {x, 5}]
结果:点击[1
],点击[2
],获取{6,6}
我正在轻视实际任务,但目标是设置按钮在Map
或Table
或ParallelTable
内的作用。
请帮助!
修改
想出来...... Evaluate
只在第一级工作。在这里,它太深了。所以我使用了ReplaceRule
:
Remove[sub]; y = {}; Table[Button[x, AppendTo[y, sub]] /. sub -> x, {x, 5}]
答案 0 :(得分:10)
这是With
的工作。 With
用于将已计算的表达式插入到任何深度的另一个表达式中 - 甚至是表达式中未立即评估的部分,如Button
的第二个参数:
y = {}; Table[With[{x = i}, Button[x, AppendTo[y, x]]], {i, 5}]
在这种简单的情况下,某些人(包括我自己)更喜欢对x
和With
变量使用相同的符号(在这种情况下为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}]