2012-01-06 33 views
7

Chúng ta có thể tạo ra một màn hình thời gian thực cho một biến như thế này:.Tạo màn hình theo thời gian thực mạnh mẽ cho các biến

[email protected]@Row[{"x = ", Dynamic[x]}] 

(Đây là thú vị và hữu ích hơn nếu x sẽ xảy ra là một cái gì đó giống như $Assumptions Thật dễ dàng để đặt giá trị và sau đó quên nó.)

Thật không may điều này sẽ ngừng hoạt động nếu hạt nhân được khởi chạy lại (Quit[], sau đó đánh giá điều gì đó). Bảng màu sẽ không hiển thị thay đổi về giá trị của x nữa.

Có cách nào để làm điều này để nó tiếp tục hoạt động ngay cả trên phiên hạt nhân không? Tôi thấy mình khởi động lại hạt nhân khá thường xuyên. (Nếu bảng kết quả gây ra hạt nhân để tự động bắt đầu sau khi Quit đó là tốt.)


Cập nhật: Như đã đề cập trong các ý kiến, nó chỉ ra rằng các bảng không còn chỉ làm việc nếu chúng ta bỏ bằng cách đánh giá Quit[] . Khi sử dụng Evaluation -> Quit Kernel -> Local, nó sẽ tiếp tục hoạt động.


+0

Hướng dẫn Mma về [Lưu trữ và theo dõi các quốc gia bảng màu] (http://reference.wolfram.com/mathematica/tutorial/StoringAndTrackingPaletteStates.html) thảo luận về một số phương pháp hữu ích. – kglr

+0

@kguler Tôi đã thấy điều đó trước đây, nhưng nếu tôi nhớ đúng, nó chỉ lưu trữ trạng thái giữa phiên (ví dụ: 'DynamicModule'). Đây không phải là những gì tôi cần. Lưu ý rằng mã chương trình (không phải trạng thái) giữ nguyên giữa các phiên và biến tôi theo dõi được mã hóa cứng. Tuy nhiên, sau khi một hạt nhân khởi động lại nó ngừng hoạt động, hoặc vì nó không cập nhật động, hoặc vì '' $ CellContext' '' trước 'x' trong bảng gây ra rắc rối (chỉ là một phỏng đoán, tôi không thể xác minh hoặc sửa lỗi này) – Szabolcs

+3

Lưu ý rằng, nếu bạn thoát khỏi hạt nhân từ trình đơn thả xuống, Evauation-> Quit kernel -> Local, bảng màu của bạn sẽ vẫn hoạt động sau khi bạn bắt đầu một phiên mới. –

Trả lời

3

Tôi chỉ có thể đoán, bởi vì trên Ubuntu đây các tình huống của tôi dường như lỗi. Bí quyết với Quit từ menu như Leonid gợi ý đã không hoạt động ở đây. Một số khác là: trên một phiên Mathematica tươi chỉ với một máy tính xách tay mở:

Dynamic[x] 
x = 1 
Dynamic[x] 
x = 2 

cho như mong đợi

2 
1 
2 
2 

Gõ các dòng tiếp theo Quit, đánh giá và gõ sau đó x=3 cập nhật chỉ là người đầu tiên của Năng động [x].

Tuy nhiên, có bạn kiểm tra lệnh

Internal`GetTrackedSymbols[] 

này mang đến cho không chỉ những biểu tượng được theo dõi nhưng bổ sung một số loại ID nơi nội dung động thuộc. Nếu bạn có thể tìm hiểu, chính xác những con số này là gì và điều tra trong các chức năng khác mà bạn tìm thấy trong bối cảnh Nội bộ, bạn có thể thêm bảng màu của bạn theo cách thủ công Nội dung động theo cách thủ công sau khi khởi động lại hạt nhân.

tôi nghĩ rằng tôi đã có một cái gì đó như thế với

Internal`SetValueTrackExtra 

nhưng tôi hiện đang không thể tái tạo hành vi.

+0

Phát hiện thú vị hơn. Tôi có thể tái tạo lại kết quả tìm kiếm của bạn về lần thứ hai 'Dynamic' không cập nhật, ngay cả khi tôi sử dụng lệnh menu để thoát. – Szabolcs

+0

Thật thú vị, phải mất hai 'Quit []' s hoặc hai lời gọi của 'Quit Kernel-Local' trên menu' Evaluation' để xóa cả hai biểu thức động thành giá trị 'x'. Sau đó, gõ 'x = 3' cập nhật cả hai. – kglr

+0

Funnier vẫn còn, số lượng 'Quit []' s là số lượng 'Dynamic [x]' s trong tất cả các sổ ghi chép mở để xóa tất cả giá trị 'x'. – kglr

3

@ câu trả lời halirutan của lọ bộ nhớ của tôi ...

Bạn đã bao giờ đi qua: Experimental/ref/ValueFunction?(Địa chỉ tài liệu)

Mặc dù tài liệu không chứa các ví dụ, các 'biết thêm thông tin' phần cung cấp các miếng ngon sau:

Việc chuyển nhượng ValueFunction[symb] = f quy định rằng bất cứ khi nào symb được một giá trị mới val, khái niệm f[symb,val] nên được đánh giá là .

+0

Phát hiện thú vị! Nó không giải quyết được vấn đề khi khởi động lại kernel và 'Dynamic' ngừng cập nhật (nếu bạn tìm ra giải pháp cho việc sử dụng chức năng này, hãy cho tôi biết!), Nhưng nó chắc chắn đáng để nhắc tới! – Szabolcs

Các vấn đề liên quan