類別 Refinement

Refinementrefine 陳述式內部 self(目前內容)的類別。它允許從其他模組匯入方法,請參閱 import_methods

公開實例方法

import_methods(module, ...) → self 按一下以切換來源

從模組匯入方法。與 Module#include 不同,Refinement#import_methods 會複製方法並將它們新增到 refinement 中,因此 refinement 會在匯入的方法中啟用。

請注意,由於方法複製,只能匯入用 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

傳回接收者 refined 的類別。

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 按一下以切換來源

傳回接收者 refined 的類別或模組。

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);
}