7

我们可以为这样的变量创建一个实时监视器:

CreatePalette@Panel@Row[{"x = ", Dynamic[x]}]

(如果x恰好是类似的东西,这会更有趣和有用$Assumptions。设置一个值然后忘记它非常容易。)

不幸的是,如果重新启动内核(Quit[],然后评估某些东西),这将停止工作。调色板将不再显示值的变化x

有没有办法做到这一点,这样它甚至可以在内核会话中继续工作?我发现自己经常重启内核。(如果生成的调色板导致内核在这之后自动启动Quit。)


更新: 正如评论中提到的,事实证明,只有当我们通过评估退出时,调色板才会停止工作Quit[]。使用时Evaluation -> Quit Kernel -> Local,它将继续工作。


4

2 回答 2

3

我只能猜测,因为在我的 Ubuntu 上,情况似乎有问题。像 Leonid 建议的从菜单中退出的技巧在这里不起作用。另一个是:在仅打开一个笔记本的新 Mathematica 会话中:

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

按预期给出

2
1
2
2

键入下一行Quit,评估和键入然后x=3仅更新 Dynamic[x] 的第一个。

不过,您是否检查过命令

Internal`GetTrackedSymbols[]

这不仅给出了跟踪的符号,而且还给出了动态内容所属的某种 ID。如果您能找出这些数字到底是什么,并在内部上下文中找到的其他函数中进行调查,您可以在重新启动内核后手动添加调色板动态内容。

我以为我有类似的东西

Internal`SetValueTrackExtra 

但我目前无法重现该行为。

于 2012-01-06T19:39:40.997 回答
3

@halirutan 的回答震撼了我的记忆……

你有没有遇到过:Experimental/ref/ValueFunction?(文件地址)

尽管文档不包含示例,但“更多信息”部分提供了以下花絮:

赋值ValueFunction[symb] = f指定每当 symb获得一个新值时,都应该计算val表达式。f[symb,val]

于 2012-01-11T02:12:00.453 回答