A resposta curta para isso é que um simples Print[]
não é uma boa maneira de depurar um pacote grande. Não é possível desativá-lo (de uma maneira robusta) somente para o seu pacote, mas não em outros lugares (ele pode ser desativado globalmente, a maneira mais simples é Print; Unprotect[Print]; Print = Null &
, mas isso irá irritar severamente seus usuários)
Para formas muito melhores de emitir mensagens de depuração e desativá-las, veja aqui:
Eu vou resumir Brett Champion e minhas próprias respostas, como pessoalmente (e subjetivamente) eu considero essas as melhores soluções, mas por favor leia o tópico completo lá.
Resposta de Brett Champion:
Use um símbolo personalizado para mensagens de depuração (assim como suas funções de pacote, você pode querer colocá-lo em um contexto separado para evitar colisões), assim:
...
debugPrint[expr]
...
Em seguida, defina uma função PrintDebug
como esta:
Attributes[PrintDebug]={HoldAll}
PrintDebug[expr_] := Block[{debugPrint = Print}, expr]
Qualquer código envolto em PrintDebug
imprimirá mensagens. Se não houver invólucro PrintDebug
, a impressão de mensagens será desativada.
MyFunction[1,2,3] // PrintDebug
Como alternativa, você pode definir um valor para debugPrint
globalmente para ativar a impressão de mensagens para tudo ou apenas $Pre = PrintDebug
.
Minha resposta:
Também podemos usar a funcionalidade Message
integrada para depuração:
debugPrint::msg = "Debug message: '1'";
debugPrint[msg_] := Message[debugPrint::msg, msg]
Use a função assim:
debugPrint["hello"]
Desativar ou ativar mensagens como esta:
Off[debugPrint::msg]
On[debugPrint::msg]