Как удалить входную ячейку при оценке?

Я хотел бы сделать следующее: при оценке входной ячейки она должна самоуничтожиться (т.е. удалить себя). Я пытался что-то взломать вместе с 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?

5
задан Community 23 May 2017 в 12:19
поделиться