class Refinement
Refinement является классом self (текущий контекст) внутри refine оператора. Он позволяет импортировать методы из других модулей, см. import_methods.
Публичные методы экземпляра
Исходный код
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
Исходный код
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–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.