Модуль Warning
Модуль Warning содержит единственный метод с именем warn, и модуль расширяет себя, делая Warning.warn доступным. Warning.warn вызывается для всех предупреждений, выпущенных Ruby. По умолчанию предупреждения выводятся в $stderr.
Изменение поведения Warning.warn полезно для настройки того, как Ruby обрабатывает предупреждения, например, для фильтрации некоторых предупреждений и/или вывода предупреждений в место, отличное от $stderr.
Если вы хотите изменить поведение Warning.warn, вы должны использовать +Warning.extend(MyNewModuleWithWarnMethod)+, и вы можете использовать ‘super`, чтобы получить стандартное поведение вывода предупреждения в $stderr.
Пример:
module MyWarningFilter
def warn(message, category: nil, **kwargs)
if /some warning I want to ignore/.match?(message)
# ignore
else
super
end
end
end
Warning.extend MyWarningFilter
Вы никогда не должны переопределять Warning#warn (метод экземпляра), так как в этом случае больше не будет возможности использовать стандартное поведение.
Джем warning предоставляет удобные способы настройки Warning.warn.
Методы класса
static VALUE
rb_warning_s_aref(VALUE mod, VALUE category)
{
rb_warning_category_t cat = rb_warning_category_from_name(category);
return RBOOL(rb_warning_category_enabled_p(cat));
} Возвращает флаг для отображения сообщений о предупреждениях для category. Поддерживаемые категории:
-
:deprecated -
предупреждения о устаревании
-
присвоение ненулевого значения
$,и$; -
ключевые аргументы
-
proc/lambda без блока
и т. д.
-
:experimental -
экспериментальные функции
-
Сопоставление с шаблоном
static VALUE
rb_warning_s_aset(VALUE mod, VALUE category, VALUE flag)
{
unsigned int mask = rb_warning_category_mask(category);
unsigned int disabled = warning_disabled_categories;
if (!RTEST(flag))
disabled |= mask;
else
disabled &= ~mask;
warning_disabled_categories = disabled;
return flag;
} Устанавливает флаги предупреждений для category. См. Warning.[] для категорий.
Методы экземпляра
static VALUE
rb_warning_s_warn(int argc, VALUE *argv, VALUE mod)
{
VALUE str;
VALUE opt;
VALUE category = Qnil;
rb_scan_args(argc, argv, "1:", &str, &opt);
if (!NIL_P(opt)) rb_get_kwargs(opt, &id_category, 0, 1, &category);
Check_Type(str, T_STRING);
rb_must_asciicompat(str);
if (!NIL_P(category)) {
rb_warning_category_t cat = rb_warning_category_from_name(category);
if (!rb_warning_category_enabled_p(cat)) return Qnil;
}
rb_write_error_str(str);
return Qnil;
} Записывает сообщение о предупреждении msg в $stderr. Этот метод вызывается Ruby для всех выводимых предупреждений. С предупреждением может быть связан category.
См. документацию модуля Warning для того, как настроить это.
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.