L'ereditarietà è una relazione tra due classi. L'ereditarietà crea una relazione genitore-figlio tra classi. È un meccanismo per il riutilizzo del codice e per consentire estensioni indipendenti del software originale tramite le classi e le interfacce pubbliche . Il vantaggio dell'ereditarietà è che le classi in basso nella gerarchia ottengono le funzioni di quelle superiori, ma possono anche aggiungere specifiche caratteristiche del proprio.
In Ruby, una classe può ereditare solo da una singola altra classe. (cioè una classe può ereditare da una classe che eredita da un'altra classe che eredita da un'altra classe, ma una singola classe non può ereditare da più classi contemporaneamente). La classe BasicObject è la classe genitore di tutte le classi in Ruby. I suoi metodi sono quindi disponibili per tutti gli oggetti, a meno che non vengano sovrascritti esplicitamente.
Ruby superare l'eredità di classe singola in una sola volta utilizzando il mixin.
Proverò a spiegare con un esempio.
module Mux
def sam
p "I am an module"
end
end
class A
include Mux
end
class B < A
end
class C < B
end
class D < A
end
è possibile rintracciare utilizzando class_name.superclass.name e fare questo processo a meno che non hai trovato BasicOject in questa gerarchia. BasicObject è super classe o ogni classe. vediamo supponiamo di voler vedere l'albero della gerarchia della classe C.
C.superclass
=> B
B.superclass
=> A
A.superclass
=> Object
Object.superclass
=> BasicObject
Si può vedere l'intera gerarchia di classe C. punto da notare con questo approccio che non troverete i moduli che sono inclusi o anteposti nelle classi genitore.
C'è un altro approccio per trovare la gerarchia completa compresi i moduli. Secondo Ruby doc ancestors. Restituisce un elenco di moduli inclusi/inseriti in mod (inclusa la mod stessa).
C.ancestors
=> [C, B, A, Mux, Object, Kernel, BasicObject]
Qui, Mux e Kernel sono moduli.
http://rubylearning.com/satishtalim/ruby_inheritance.html https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)
quando bloccato in questo modo sempre provare 'B.methods.sort' a IRB. Forse qualcosa ti darà un indizio sul nome del metodo che cerchi. –
@IvayloStrandjev Questo non aiuta. Ci sono troppi metodi per guardare attraverso È una perdita di tempo. – sawa
@sawa non è vero. Mi ci sono voluti 30 secondi. Basta che gli altri utenti siano più veloci di me, eppure abbastanza veloci. –