Programmieren lernen: Was ist der Unterschied zwischen include und extend in Ruby?


Antwort 1:
Modul Quietschend
  auf jeden Fall quietschen
    "eep!"
  Ende
Ende

"Include" mischt die Instanzmethoden eines Moduls in das empfangende Modul / die empfangende Klasse.

Klasse Sache
  gehören quietschend
Ende

Was.neues.squeak
# => "eep!"

"Erweitern" mischt die Instanzmethoden eines Moduls in das empfangende Objekt.

thing = Object.new
thing.extend Quietschend
thing.squeak
# => "eep!"

Wenn Sie die Methode "extend" im Kontext einer Klasse verwenden, werden die Instanzmethoden des Moduls zu "Klassenmethoden", da sie in die Klasse und nicht in die Instanzen der Klasse gemischt werden.

Klasse OtherThing
  Quietschend verlängern
Ende

OtherThing.squeak
# => "eep!"
OtherThing.new.squeak
# => NoMethodError (undefinierte Methode `squeak ')