класс Refinement
Refinement — это класс self (текущий контекст) внутри refine оператора. Он позволяет импортировать методы из других модулей, см. import_methods.
Методы публичного экземпляра
import_methods(module, ...) → self Показать исходный код
static VALUE
refinement_import_methods(int argc, VALUE *argv, VALUE refinement)
{
} Импортирует методы из модулей. В отличие от Module#include, Refinement#import_methods копирует методы и добавляет их в уточнение, поэтому уточнение активируется в импортированных методах.
Обратите внимание, что из-за копирования методов импортировать можно только методы, определённые в Ruby-коде.
module StrUtils
def indent(level)
' ' * level + self
end
end
module M
refine String do
import_methods StrUtils
end
end
using M
"foo".indent(3)
#=> " foo"
module M
refine String do
import_methods Enumerable
# Can't import method which is not defined with Ruby code: Enumerable#drop
end
end
Также известен как: import_methods
refined_class → class Показать исходный код
static VALUE
rb_refinement_refined_class(VALUE module)
{
rb_warn_deprecated_to_remove("3.4", "Refinement#refined_class", "Refinement#target");
return rb_refinement_module_get_refined_class(module);
} Устарело; предпочтительнее target.
Возвращает класс, уточнённый получателем.
target → class_or_module Показать исходный код
VALUE
rb_refinement_module_get_refined_class(VALUE module)
{
ID id_refined_class;
CONST_ID(id_refined_class, "__refined_class__");
return rb_attr_get(module, id_refined_class);
} Возвращает класс или модуль, уточнённый получателем.
module M refine String do end end M.refinements[0].target # => String
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.