Как подавить предупреждения об устаревании?

(Это связано с вопросом это).

Как я могу подавить предупреждения об устаревании в Ruby, пока не найду время обновить код? Пример: следующая команда сгенерирует предупреждение триггер устарел (сама команда бессмысленна, я просто хотел привести минимальный, синтаксически правильный пример):

 ruby -v -e '0 if /a/.../b/'

я уже пробовал

ruby -e '$VERBOSE=nil;0 if /a/.../b/'

и, после установки драгоценного камня предупреждение,

 ruby -e 'require "warning";; Warning.ignore(/deprecated/) 0 if /a/.../b/'

но предупреждение по-прежнему печатается в stderr. Я не хочу перенаправлять весь stderr в битовое ведро, потому что не хочу терять важные сообщения.

основываясь на комментарии к ответу ниже, я должен спросить, зачем вам это нужно?

lacostenycoder 18.06.2019 14:43

См. ссылку в моем сообщении, которая объясняет предысторию этой проблемы.

user1934428 18.06.2019 14:48

что ты имеешь в виду под "в битое ведро"? Это флуд логов или что?

lacostenycoder 18.06.2019 14:57
к битовому ведру — это еще один способ сказать 2>/dev/null.
user1934428 18.06.2019 15:38

Почему бы вам просто не исправить код, использующий устаревший класс или метод? Вам все равно нужно будет сделать это в какой-то момент времени, если вы хотите иметь возможность запускать современные версии Ruby.

spickermann 18.06.2019 16:55

@spickermann: Это также тема вопроса, на который я ссылался. Я ищу решение, которое по крайней мере так же просто, как текущее. Также обратите внимание, что я написал выше пока не найду время обновить код. И я все еще надеюсь, что разработчики Ruby пересмотрят свое решение отказаться от этого элемента языка.

user1934428 19.06.2019 08:33
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
6
2 429
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я думаю что это :

ruby -W0 -e 'code'

К сожалению, он фильтрует все предупреждения (не только устаревшие предупреждения...)

user11659763 18.06.2019 14:37
Ответ принят как подходящий

Предупреждение генерируется синтаксическим анализатором перед оценкой кода. Это включает в себя ваш код Warning.ignore, поэтому конфигурация не готова, когда появляется предупреждение.

Вы можете переместить этот код в отдельный файл:

# warn.rb
require 'warning'
Warning.ignore(/deprecated/)

и загрузите его через -r:

$ ruby -r./warn.rb -e '0 if /a/.../b/'

Флип-флоп больше не считается устаревшим.

Ответ на актуальный вопрос: ruby -W:no-deprecated

Спасибо, что указали на это! Я не знал об этом, но теперь, когда вы это рассказываете, я нашел статью это на эту тему.

user1934428 30.06.2020 18:02

Другие вопросы по теме