Я хотел бы сделать следующее: при оценке входной ячейки она должна самоуничтожиться (т.е. удалить себя).Я пытался взломать что-то вместе с SelectionMove
и NotebookDelete
, но не совсем получил то, что хотел.
Вот возможные варианты использования:
theкоманда может быть сокращением для ряда других команд, которые будут генерироваться динамически и вставляться в записную книжку
команда может использоваться только для побочных эффектов (например, для установки параметра записной книжки илиоткрыть новый блокнот);оставление команды в блокноте после оценки не имеет смысла и создает беспорядок
Редактировать: Согласно Мистеру Волшебнику, ответ - 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?