Ruby中的Object和BasicObject有什么区别?

时间:2012-01-17 12:44:27

标签: ruby ruby-1.9

这些课程有什么区别?他们的目的之间有什么区别?

1 个答案:

答案 0 :(得分:57)

BasicObject是在Ruby 1.9中引入的,它是Object的父级(因此BasicObject是Ruby中所有类的父类)。

BasicObject几乎没有任何方法:

::new
#!
#!=
#==
#__id__
#__send__
#equal?
#instance_eval
#instance_exec

  

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

     

BasicObject不包含内核(对于像puts这样的方法)和   BasicObject位于标准库的名称空间之外   如果没有使用完整的类路径,将无法找到常见的类。


  

对象混合在内核模块中,构成内置内核   功能全局可访问。虽然是Object的实例方法   由内核模块定义......

如果您不需要BasicObject的方法,可以使用Object作为对象的父级,否则您将取消定义它们:

# when you inherit Object
class Tracer
  instance_methods.each do |m|
    next if [:__id__, :__send__].include? m
    undef_method m
  end

  # some logic
end

# when you inherit BasicObject
class Tracer < BasicObject
  # some logic
end