2011-09-23 39 views
7

Bất kỳ ý tưởng nào về cách làm việc này?Đánh giá [] dường như không hoạt động bên trong Nút []

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

Kết quả: Nhấp vào [1], nhấn [2], có {6,6}

Tôi đang tầm thường hóa các nhiệm vụ thực tế, nhưng mục đích là để thiết lập những gì một nút thực hiện bên trong một Map hoặc một Table hoặc ParallelTable.

Vui lòng trợ giúp!


EDIT
đặn nó ra ... Evaluate tác phẩm chỉ ở mức độ đầu tiên. Ở đây, nó quá sâu. Vì vậy, tôi sử dụng ReplaceRule:

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

Vui lòng đăng 'Xóa [phụ]; y = {}; Bảng [ Nút [x, Nối vào [y, phụ]] /. sub -> x, {x, 5}] 'dưới dạng câu trả lời –

Trả lời

5

thay thế và chức năng tinh khiết cung cấp lựa chọn thay thế ngắn gọn để With. Ví dụ:

y={}; Range[5] /. x_Integer :> Button[x, AppendTo[y, x]] 

hoặc

y = {}; Replace[Range[5], x_ :> Button[x, AppendTo[y, x]], {1}] 

hoặc

y = {}; Array[Button[#, AppendTo[y, #]] &, {5}] 

hoặc

y = {}; Button[#, AppendTo[y, #]] & /@ Range[5] 

Đối với một ví dụ so sánh những kỹ thuật này, xem bài của tôi here, nơi chúng được áp dụng để một prob lem của việc tạo ra một danh sách các chức năng tinh khiết với tham số nhúng trong cơ thể của họ (đóng cửa).

10

Đây là một công việc cho With. With được sử dụng để chèn một biểu thức được đánh giá vào một biểu hiện ở bất kỳ độ sâu - thậm chí thành phần của biểu thức không được đánh giá ngay lập tức như đối số thứ hai để Button:

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

Trong trường hợp đơn giản như thế này, một số người (trong đó có tôi) thích sử dụng cùng một biểu tượng (x trong trường hợp này) cho cả các biến WithTable, như sau: quy tắc

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

+1. Nó là tiếp tuyến với các cuộc thảo luận hiện tại, nhưng ở dưới cùng của bài viết của tôi trong chủ đề này: http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/thread/b07d6ff89313c70d, tôi đã xác định macro, trong đó, khi được bao bọc xung quanh 'Với [...]', buộc nó đưa (các) biểu thức không được đánh giá vào cơ thể của nó. Tôi đề cập đến nó ở đây bởi vì tôi nghĩ bạn có thể thấy nó thú vị. –

+1

+1 Để giải thích cấu trúc phạm vi trong các từ ow của bạn (chứ không phải các từ WRI, không đủ rõ ràng) –

0

Evaluate chỉ hoạt động ở cấp độ đầu tiên. Ở đây, nó quá sâu. Vì vậy, tôi đã sử dụng ReplaceRule:

Remove[sub]; y = {}; Table[ Button[x, AppendTo[y, sub]] /. sub -> x, {x, 5}] 
Các vấn đề liên quan