Stavo studiando come viene implementato l'interprete Ruby e una domanda che non ha ancora ricevuto risposta per me. Questo è quello nel titolo: dal Class
(r_cClass
) ha super
impostato su se stesso (ignorando i metaclassi, poiché in realtà super
è il metaclasse di r_cClass
), se invio un metodo all'oggetto Class
, questo verrà cercato nella tabella dei metodi di Class
'classe. Ma la classe Class
'è Class
, quindi non dovrei finire a cercare i metodi di istanza di Class
? Ma non è il caso dato che nella documentazione i metodi di classe Class
e i metodi di istanza Class
sono separati. Nel numero search_method
di Ruby, non ho trovato alcun controllo speciale per la classe Class
. Qualcuno può far luce su questo?Come può Class essere della classe Class e non avere metodi di istanza di classe?
risposta
Le tue convinzioni sul modo in cui dovrebbe funzionare sembrano giuste, ma non sono sicuro del motivo per cui pensi che non funzioni in questo modo.
In Ruby 1.8.7:
irb> a = Class.new.methods - Object.new.methods
=> [... 36 element array ...]
irb> b = Class.methods - Object.new.methods
=> [... 37 element array ...]
irb> b - a
=> ["nesting"]
Un normale istanza di classe (Class.new) ha 36 metodi di istanza. Se guardo la classe stessa, che è anche una normale istanza di classe, ha gli stessi 36 metodi di istanza, più 1 metodo di classe aggiuntivo (annidamento), che esiste solo perché è ereditato dal suo modulo superclasse.
Si noti che l'aggiunta di un metodo di istanza a Class automaticamente lo aggiunge come metodo di classe, ma non aggiungendo una classe al metaclass di Classe.
irb> class Class ; def everywhere ; true ; end ; end
irb> class << Class ; def only_singleton ; true ; end ; end
irb> Class.everywhere
=> true
irb> Class.new.everywhere
=> true
irb> Class.only_singleton
=> true
irb> Class.new.only_singleton
NoMethodError: undefined method 'only_in_singleton' for #<Class:0x4800ac8>
Quindi i metodi sono in effetti gli stessi. In realtà non c'è alcun indizio nel codice sorgente che mi ha portato a questo pensiero. È solo che i documenti Ruby separano chiaramente il metodo di istanza di classe dai metodi di classe singleton. Questa separazione è fatta solo per chiarezza? – eugeniodepalo
Con i metodi singleton intendi metodi di classe? – rdvdijk
Sì, intendo i metodi di classe. – eugeniodepalo
- 1. Java map, key = class, value = istanza di quella classe
- 2. metodi call class es6 dalla stessa classe
- 3. PHP Class membri e metodi
- 4. Chiamata di metodi sovrascritto nella classe derivata da Base Class
- 5. Classe classe - metodi istanza vs. classe
- 6. Scala - Dynamic class carico - classe A non può essere lanciato alla classe A
- 7. variabili di istanza della classe python e variabili di classe
- 8. Comprendere rubino .class e .ancestors metodi
- 9. Perché una classe sub class di una classe deve essere statica per inizializzare la sottoclasse nel costruttore della classe?
- 10. Class e std :: async sul membro della classe in C++
- 11. Recuperare l'attributo .class di una classe generica
- 12. Il costruttore privato Scala class di classe non è privato
- 13. Perché una classe interna non statica non può avere membri statici (campi e metodi)?
- 14. Oggetto VBA Class() come proprietà di un'altra classe
- 15. Creazione di un'istanza per Class?
- 16. Una classe interna di una classe template può essere una classe non template?
- 17. La classe genitore e figlio in Java può avere la stessa variabile di istanza?
- 18. Cosa significa .class dopo il nome di una classe
- 19. Delegare i metodi di istanza al metodo di classe
- 20. Elenco dei metodi di istanza della classe corrente solo
- 21. css non class select?
- 22. C# eventi e metodi della classe
- 23. I nomi di classi e metodi alla moda racchiusi in ``: class `Questa è una classe fantastica {}?
- 24. Python 2.6: Class in a Class?
- 25. Esegui i metodi Class nei thread (python)
- 26. attributo Class per due istanze della stessa classe
- 27. File .class multipli generati per una classe?
- 28. Ottieni il genitore della classe di istanza
- 29. istanza modello di classe
- 30. Come mostrare l'uso di metodi statici UML Class Diagram
In una domanda astratta come questa, è probabilmente una buona idea fornire esempi specifici, come un esempio di un metodo di istanza e un esempio di un metodo di classe. –