类 Refinement

Refinementrefine 语句中 self(当前上下文)的一个类。它允许从其他模块导入方法,请参见 import_methods

公共实例方法

import_methods(module, ...) → self 点击切换源代码

从模块导入方法。与 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
static VALUE
refinement_import_methods(int argc, VALUE *argv, VALUE refinement)
{
}
也称为:import_methods
refined_class → class 点击切换源代码

已弃用;建议使用 target

返回接收者精炼的类。

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 → class_or_module 点击切换源代码

返回接收者精炼的类或模块。

module M
  refine String do
  end
end

M.refinements[0].target # => String
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);
}