Angenommen, ich habe ein Modul namens Flight
mit Klassen- und Instanzmethoden. Ich kann seine Methoden in einer Klasse erhalten mit include
, extend
oder beides:Warum funktioniert die Vererbung von Ruby-Modulen nicht wie eine Klassenvererbung?
class Bat < Mammal
# Add Flight's class methods to Bat.
extend Flight
# Add Flight's instance methods to Bat.
include Flight
...
end
include
Flight
zu Bat.ancestors
hinzufügen, aber extend
nicht.
Meine Frage ist, Warum ist das für Module anders als für Klassen? Wenn ich Mammal
unterwerfe, immer erhalten Sie beide Klasse und Instanzmethoden auf einmal. Wenn ich jedoch ein Modul mische, kann ich nicht gleichzeitig Klassen- und Instanzmethoden abrufen (es sei denn, ich verwende den self.included
Hook oder etwas wie ActiveSupport::Concern).
Gibt es hinter diesem Unterschied ein Problem mit dem Sprachdesign?
Nun, hat es einige Unterschiede, um die Existenz eines gesonderten zu rechtfertigen Entität, richtig? :) –