Desafortunadamente no hay forma real de hacerlo, al menos no en la mayoría de las versiones de Ruby por ahí (variaciones puede existir), cortos de seguimiento de la salida del programa y abortarlo cuando aparezca una advertencia en caso de error estándar . He aquí por qué:
- Rubí define
Kernel.warn
, que puede redefinir para hacer lo que desee (incluyendo la salida), y que se había esperan (esperanza) para ser utilizado constantemente por Ruby a reportar advertencias (incluyendo por ejemplo, la advertencia de análisis sintáctico interno), pero
- métodos implementados de forma nativa (en C) en el interior de Ruby a su vez invocar directamente un método nativo llamado
rb_warn
de source/server.c
, completamente omitiendo su redefinición de Kernel.warn
(p. Ej. la advertencia "string literal in condition
", por ejemplo, emite cuando haciendo algo como: do_something if 'string'
, se imprime a través de la nativa rb_warn
de source/parse.c
)
- para hacer las cosas aún peor, hay una,
rb_warning
método nativo adicional, que puede ser utilizado por Rubí para registrar advertencias si se especifica -w
o -v
.
Por lo tanto, si usted necesita tomar acción únicamente en avisos generados por su código de aplicación que llama Kernel.warn
continuación simplemente redefinir Kernel.warn
. De lo contrario, usted tiene exactamente dos opciones:
- alteran
source/error.c
para salir en rb_warn
y rb_warning
y reconstruir Rubí
- controlar la salida de error estándar de su programa de '
: warning:
', y abortar en (y rb_warn_m
?) partido
Presenté una solicitud de función para un indicador de línea de comando para advertir excepciones ... http://redmine.ruby-lang.org/issues/show/3916 –
The Doctor What's RFE obtuvo una respuesta notando esa configuración $ DEBUG = verdadero hace que "demasiados argumentos para la cadena de formato" pasen de ser una advertencia a una Excepción. –
@TheDoctorQué su enlace está desactualizado. Nuevo enlace: https://bugs.ruby-lang.org/issues/3916 –