2012-01-17 15 views
37

¿Cuál es la diferencia entre estas clases? ¿Cuál es la diferencia entre sus propósitos?¿Cuál es la diferencia entre Object y BasicObject en Ruby?

+1

Los documentos responden a la primera parte. BasicObject tiene menos funcionalidad y se puede utilizar en lugar de Object si de todos modos eliminara muchos métodos Object. –

Respuesta

55

BasicObject se introdujo en Ruby 1.9 y es uno de los padres de Object (por lo tanto, BasicObject es la clase principal de todas las clases en Ruby).

BasicObject casi no tiene métodos en sí:

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

BasicObject puede ser utilizado para la creación de jerarquías de objetos independientes de jerarquía de objetos de Ruby, objetos proxy como el Delegador clase, o otros usos donde la contaminación del espacio de nombres de los métodos y clases de Ruby debe ser evitado.

BasicObject no incluye Kernel (por métodos como pone) y BasicObject está fuera del espacio de nombres de la biblioteca estándar de modo clases comunes no se encontraron sin el uso de un camino completo de la clase.


objeto mezclas en el módulo del núcleo, por lo que la incorporada en el kernel funciones accesibles a nivel mundial. Aunque los métodos de instancia de objeto se definen por el módulo del kernel ...

Puede utilizar BasicObject como padre de su objeto en caso de que si usted no necesita métodos de Object y que le undefine ellos de otra manera:

# 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 
Cuestiones relacionadas