2012-01-17 16 views
37

Qual è la differenza tra queste classi? Qual è la differenza tra i loro scopi?Qual è la differenza tra Object e BasicObject in Ruby?

+1

I documenti rispondono alla prima parte. BasicObject ha meno funzionalità e può essere usato al posto di Object se si finisce comunque con la rimozione di una serie di metodi Object. –

risposta

55

BasicObject è stato introdotto in Ruby 1.9 ed è un genitore di Object (quindi BasicObject è la classe genitore di tutte le classi in Ruby).

BasicObject non ha quasi metodi su se stessa:

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

BasicObject può essere utilizzato per la creazione di gerarchie di oggetti indipendenti di gerarchia di oggetti di Ruby, oggetti proxy come il Delegante classe, o altri usi in cui l'inquinamento dello spazio dei nomi dai metodi e dalle classi di Ruby deve essere evitato.

BasicObject non include kernel (per metodi come put) e BasicObject è al di fuori dello spazio dei nomi della libreria standard, quindi non saranno trovati classi comuni senza un utilizzando un percorso completo della classe.


oggetto miscele nel modulo kernel, rendendo incorporato kernel funzioni globalmente accessibile. Anche se i metodi di oggetto istanze vengono definite dal modulo del kernel ...

È possibile utilizzare BasicObject come genitore del vostro oggetto nel caso in cui se non hai bisogno di metodi di Object e tu li avresti ridefinisca altrimenti:

# 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 
Problemi correlati