2010-02-12 3 views

Répondre

1

Pourquoi supposez-vous que le noyau n ° p est destiné au débogage? Il écrit à stdout comme noyau # print ou printf en C.

Si vous voulez écrire à l'erreur standard, vous pouvez faire:

$stderr.puts(x.inspect) 

Par ailleurs, si vous voulez vraiment utiliser le débogage printf I vous suggère de lire ceci article about debugging techniques

+0

Vous ne voulez pas dire '$ stderr.puts (x.inspect)'? –

+0

Si vous voulez le comportement du noyau # p, oui. –

2

Vous pouvez définir une fonction globale "q", qui fonctionne exactement comme "p", sauf qu'elle imprime dans $ stderr.

#!/usr/bin/ruby1.8 

module Kernel 

    def q(*stuff) 
    stuff.each { |thing| $stderr.print(thing.inspect + "\n")} 
    end 

end 

q 'foo' # => "foo" 

Vous pourriez être tenté d'utiliser puts au lieu de print ... + "\n". Ce code utilise print pour le rendre thread-safe: puts peut être interrompu entre le moment où il imprime ses arguments et le moment où il imprime la nouvelle ligne, provoquant l'apparition de deux threads sur une ligne. Il est rare que vous ayez du code provenant de plusieurs threads qui écrivent en même temps sur $ stdout/$ stderr, donc ce n'est généralement pas un problème. Mais étant un outil de débogage, vous finirez certainement par l'utiliser pour découvrir ce qui se passe dans les threads.

Questions connexes