评估[]似乎无法在按钮[]
内工作任何想法如何让这个工作?评估[]似乎无法在按钮[]
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}]
替换规则和纯函数提供了简洁的替代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,如果它们被到概率创建一个嵌入参数(闭包)中的参数的纯函数列表。
这是With
工作。 With
用于插入一个计算表达式到任何深度的另一种表达方式 - 即使到未评估马上喜欢的第二个参数Button
表达的部分:
y = {}; Table[With[{x = i}, Button[x, AppendTo[y, x]]], {i, 5}]
在简单的情况就是这样,有些人(包括我自己)喜欢使用(在这种情况下x
)相同的符号既With
和Table
变量,即:
y = {}; Table[With[{x = x}, Button[x, AppendTo[y, x]]], {x, 5}]
+1。这与当前的讨论是切线的,但在本帖的底部:http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/thread/b07d6ff89313c70d,我定义了一个宏,当它缠绕在'With'时,迫使它将未评估的表达式注入其身体。我在这里提到它是因为我认为你可能会觉得它很有趣。 –
+1为了解释你的流言中的范围构造(而不是WRI文件,这些文件不够清楚) –
Evaluate
只在第一级工作。这里太深了。所以我用ReplaceRule
:
Remove[sub]; y = {}; Table[ Button[x, AppendTo[y, sub]] /. sub -> x, {x, 5}]
请发帖'删除[sub]; y = {};表[ 按钮[x,AppendTo [y,sub]] /。 sub - > x,{x,5}]作为回答 –