module Warning
Das Warning-Modul enthält eine einzelne Methode namens warn, und das Modul erweitert sich selbst, wodurch Warning.warn verfügbar wird. Warning.warn wird für alle von Ruby ausgegebenen Warnungen aufgerufen. Standardmäßig werden Warnungen an $stderr ausgegeben.
Das Ändern des Verhaltens von Warning.warn ist nützlich, um anzupassen, wie Warnungen von Ruby behandelt werden, beispielsweise durch Filtern einiger Warnungen und/oder Ausgeben von Warnungen an einem anderen Ort als $stderr.
Wenn Sie das Verhalten von Warning.warn ändern möchten, sollten Sie Warning.extend(MyNewModuleWithWarnMethod) verwenden und Sie können super verwenden, um das Standardverhalten des Ausgebens der Warnung an $stderr zu erhalten.
Beispiel
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
Sie sollten niemals Warning#warn (die Instanzmethode) neu definieren, da dies dann keine Möglichkeit mehr bietet, das Standardverhalten zu verwenden.
Das Gem warning bietet praktische Möglichkeiten, Warning.warn anzupassen.
Öffentliche Klassenmethoden
Source
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));
}
Gibt das Flag zurück, um die Warnmeldungen für category anzuzeigen. Unterstützte Kategorien sind
:deprecated-
Deprecation-Warnungen
-
Zuweisung eines Nicht-Nil-Wertes an
$,und$; -
Schlüsselwortargumente
etc.
-
:experimental-
Experimentelle Funktionen
:performance-
Performance-Hinweise
-
Shape-Variationsgrenze
-
Source
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;
}
Setzt die Warnungs-Flags für category. Siehe Warning.[] für die Kategorien.
Source
static VALUE
rb_warning_s_categories(VALUE mod)
{
st_index_t num = warning_categories.id2enum->num_entries;
ID *ids = ALLOCA_N(ID, num);
num = st_keys(warning_categories.id2enum, ids, num);
VALUE ary = rb_ary_new_capa(num);
for (st_index_t i = 0; i < num; ++i) {
rb_ary_push(ary, ID2SYM(ids[i]));
}
return rb_ary_freeze(ary);
}
Gibt eine Liste der unterstützten Kategoriesymbole zurück.
Öffentliche Instanzmethoden
Source
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;
}
Schreibt die Warnmeldung msg nach $stderr. Diese Methode wird von Ruby für alle ausgegebenen Warnungen aufgerufen. Eine category kann mit der Warnung enthalten sein.
Siehe die Dokumentation des Warning-Moduls, wie dies angepasst werden kann.