Одной из возможностей является определение условного Initialization
для каждого Dynamic
объекта в документе и помещение выражений инициализации в ячейку инициализации (или в другую ячейку с тегом, который позволяет легко идентифицировать его). Например, используя ячейку инициализации:
Manipulate[
Plot[n f[x], {x, -3, 3}], {n, 1, 4},
Initialization :> If[!TrueQ[$initialized],
FrontEndTokenExecute["EvaluateInitialization"]]]
Таким образом, вам не нужно хранить выражения инициализации в каждом Dynamic
объекте, и эти выражения не будут повторно оцениваться для каждого из них.
Обновление
Похоже, что опция NotebookDynamicExpression
в Notebook - это то, что вам нужно. Джон Фульц написал об этом:
"Dynamic
s могут быть сохранены в параметрах интерфейса CellDynamicExpression
, NotebookDynamicExpression
и FrontEndDynamicExpression
. Эти Dynamic
s не отображаются, но обновляются, когда ячейка / ноутбук / внешний интерфейс, к которому они прикреплены отображается. "
Итак, решение:
SetOptions[EvaluationNotebook[], NotebookDynamicExpression :> (a = 1)]
Попробуйте сохранить и снова открыть записную книжку после оценки выше. И проверь определение для a
.