Я хотел бы сделать следующее: при оценке входной ячейки она должна самоуничтожиться (т.е. удалить себя). Я пытался что-то взломать вместе с SelectionMove
и NotebookDelete
, но не получил того, что хотел.
Вот возможные варианты использования:
команда может быть сокращение для ряда других команд, которые будут генерироваться динамически и вставляться в записную книжку
команда может использоваться только для побочных эффектов (например, для установки параметра записной книжки или для открытия новой записной книжки); оставление команды в записной книжке после оценки бесполезно и создает беспорядок
Правка: Согласно мистеру Мастеру, ответ будет SelectionMove [EvaluationNotebook [], Previous, Cell]; NotebookDelete [];
. Не знаю, почему раньше у меня не получалось. Вот код, использующий эту идиому.
writeAndEval[nb_, boxExpr_] := (NotebookWrite[nb,
CellGroupData[{Cell[BoxData[boxExpr], "Input"]}]];
SelectionMove[nb, Previous, Cell];
SelectionMove[nb, Next, Cell];
SelectionEvaluate[nb]);
addTwoAndTwo[] := Module[{boxExpr},
boxExpr = RowBox[{"2", "+", "2"}];
SelectionMove[EvaluationNotebook[], Previous, Cell];
NotebookDelete[];
writeAndEval[EvaluationNotebook[], boxExpr];
]
Теперь, запуск addTwoAndTwo []
удаляет исходный ввод и заставляет его выглядеть так, как если бы вы оценили «2 + 2». Конечно, вместо этого вы можете делать все что угодно и не обязательно печатать в блокноте.
Редактировать 2: Абстракция Саши довольно элегантна. Если вам интересно, как это используется в «реальном мире», ознакомьтесь с кодом, который я разместил в вопросе «Что у вас в сумке с инструментами»: Что находится в вашей сумке с инструментами Mathematica?