Spec-Zone.ru › Ruby 3.4

class Refinement

Parent:
Module

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
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–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API