Можно ли временно переименовать и заблокировать встроенные функции?

Я хочу временно переименовать встроенный символ и использовать его с другим именем, блокируя основной название этого символа. Например, я хочу, чтобы следующий код печатал только «2», но не «1» и «3»:

Block[{print = Print, Print}, Print[1]; print[2]; Print[3];]

На самом деле приведенный выше код ничего не печатает.

Можно ли заставить print работать внутри такого кода, полностью блокируя символ Print ?

Решения типа

With[{Print = f, print = Print}, Print[1]; print[2]; Print[3];] 

не подходят, поскольку Print на самом деле не заблокирован внутри такого кода.

Вопрос возник, когда думал о том, как отключить отслеживание внутренних компонентов сообщения .

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