为变量创建强大的实时监控器

时间:2012-01-06 10:40:50

标签: dynamic wolfram-mathematica mathematica-frontend

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

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

(如果x恰好是$Assumptions,这会更有趣,也很有用。设置一个值然后忘记它就很容易了。)

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

有没有办法做到这一点,所以它在内核会话中保持工作?我发现自己经常重启内核。 (如果生成的调色板导致内核在Quit之后自动启动,那很好。)


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


2 个答案:

答案 0 :(得分: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 

但我目前无法重现这种行为。

答案 1 :(得分:3)

@ halirutan的回答激起了我的记忆......

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

虽然文档中没有包含任何示例,但有更多信息'部分提供以下花絮:

  

作业ValueFunction[symb] = f指定何时   symb获取新值val,表达式f[symb,val]应为   评价。