2011-09-23 1 views
7

Любая идея, как заставить это работать?Оценка [] кажется, не работает внутри кнопки []

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

Результат: Нажмите кнопку [1], нажмите [2], получить {6,6}

Я тривиализующее реальную задачу, но цель состоит в том, чтобы установить, что кнопка делает Внутри Map или Table или ParallelTable.

Пожалуйста, помогите!


EDIT
Фигурные это ... 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 в данном случае) для обоих With и Table переменных, таким образом: правила

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

 Смежные вопросы

  • Нет связанных вопросов^_^