Nie ma niestety prawdziwy sposób w ten sposób, przynajmniej nie na większości wersji Ruby tam (wariacje może istnieje), krótkie monitorowania wyjście programu i przerwanie go, gdy na standardowym wyjściu błędów pojawia się ostrzeżenie . Oto dlaczego:
- Ruby definiuje
Kernel.warn
, które może przedefiniować zrobić cokolwiek chcesz (w tym wyjściu), i której bym oczekiwać (mam nadzieję) stosowany konsekwentnie przez Ruby zgłosić ostrzeżeń (w tym także np ostrzeżenia analizowania) ale
- sposoby realizowane natywnie (w C) w środku Ruby z kolei bezpośrednio wywoływać natywną metodę zwaną
rb_warn
z source/server.c
całkowicie z pominięciem nowej definicji Kernel.warn
(np. W „string literal in condition
” ostrzeżenie, na przykład, wydane, gdy robi coś takiego: do_something if 'string'
, jest drukowany za pomocą natywnego rb_warn
z source/parse.c
)
- dokonać rzeczy jeszcze gorsze, istnieje dodatkowa,
rb_warning
natywny sposób, który może być stosowany przez Ruby aby rejestrować ostrzeżenia, jeśli określono -w
lub -v
.
Tak więc, jeśli trzeba podjąć działania wyłącznie na ostrzeżeń generowanych przez kod aplikacji woła Kernel.warn
następnie prostu przedefiniować Kernel.warn
. W przeciwnym razie trzeba dokładnie dwie opcje:
- zmieniają
source/error.c
aby wyjść w rb_warn
i rb_warning
i odbudować Ruby
- monitorować standardowe wyjście błędu swojego programu dla „
: warning:
”, i przerwie go (i rb_warn_m
?) mecz
Złożyłem żądanie funkcji dla flagi linii poleceń, aby ostrzec wyjątki ... http://redmine.ruby-lang.org/issues/show/3916 –
Doktor What's RFE otrzymał odpowiedź, że ustawienie $ DEBUG = true powoduje, że "zbyt wiele argumentów dla ciągu formatu" ma zostać zmienionych z ostrzeżenia na wyjątek. –
@TheDoctorCo twój link jest nieaktualny. Nowy link: https://bugs.ruby-lang.org/issues/3916 –