这些课程有什么区别?他们的目的之间有什么区别?
答案 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