当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby BasicObject类用法及代码示例


本文简要介绍ruby语言中 BasicObject类 的用法。

BasicObject 是 Ruby 中所有类的父类。这是一个显式的空白类。

BasicObject 可用于创建独立于 Ruby 对象层次结构的对象层次结构、代理对象(如 Delegator 类)或其他必须避免来自 Ruby 方法和类的命名空间污染的用途。

为避免污染其他用户的 BasicObject ,应创建一个适当命名的 BasicObject 子类,而不是直接修改BasicObject:

class MyObjectSystem < BasicObject
end

BasicObject 不包括 Kernel (对于像 puts 这样的方法)并且 BasicObject 位于标准库的命名空间之外,因此如果不使用完整的类路径,将无法找到通用类。

可以使用多种策略将标准库的有用部分提供给 BasicObject 的子类。子类可以 include Kernel 获得 putsexit 等。可以创建和包含自定义 Kernel-like 模块,或者可以通过 method_missing 使用委托:

class MyObjectSystem < BasicObject
  DELEGATE = [:puts, :p]

  def method_missing(name, *args, &block)
    return super unless DELEGATE.include? name
    ::Kernel.send(name, *args, &block)
  end

  def respond_to_missing?(name, include_private = false)
    DELEGATE.include?(name) or super
  end
end

::File::Enumerator 等根目录引用所需的常量,可以在 BasicObject 子类中获得对 Ruby 标准库中的类和模块的访问。与 method_missing 一样,const_missing 可用于将常量查找委托给 Object

class MyObjectSystem < BasicObject
  def self.const_missing(name)
    ::Object.const_get(name)
  end
end

这里有什么

这些是为 BasicObject 定义的方法:

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 BasicObject类。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。