Короткий ответ на этот вопрос заключается в том, что простой Print[]
не является хорошим способом отладки большого пакета. Невозможно отключить его (надежным способом) только для вашего пакета, но не в других местах (его можно отключить глобально, проще всего Print; Unprotect[Print]; Print = Null &
, но это сильно раздражает ваших пользователей)
Чтобы узнать, как лучше выводить отладочные сообщения и отключать их, см. Здесь:
https://stackoverflow.com/questions/8698754/message-generation-in-mathematica
Я подытожу Бретта Чемпиона и мои собственные ответы оттуда, так как лично (и субъективно) я считаю эти решения наилучшими, но, пожалуйста, прочитайте всю ветку там.
Ответ Бретта Чемпиона:
Используйте пользовательский символ для сообщений отладки (так же, как ваши функции пакета, вы можете поместить его в отдельный контекст, чтобы избежать коллизий), например так:
... debugPrint[expr] ...
Затем определите PrintDebug
функцию следующим образом:
Attributes[PrintDebug]= PrintDebug[expr_] := Block[, expr]
Любой завернутый код PrintDebug
будет печатать сообщения. Если PrintDebug
обертки нет, печать сообщений отключена.
MyFunction[1,2,3] // PrintDebug
Кроме того, вы можете установить debugPrint
глобальное значение, чтобы включить печать сообщений для всего или просто сделать $Pre = PrintDebug
.
Мой ответ:
Мы также можем использовать встроенную Message
функциональность для отладки:
debugPrint::msg = "Debug message: `1`"; debugPrint[msg_] := Message[debugPrint::msg, msg]
Используйте функцию как это:
debugPrint["hello"]
Выключите или включите такие сообщения:
Off[debugPrint::msg] On[debugPrint::msg]