Προγραμματισμός μάθησης: Ποια είναι η διαφορά μεταξύ της συμπεριφοράς και της επέκτασης σε Ruby;


Απάντηση 1:
μονάδα Squeaky
  def τσίμπημα
    "eep!"
  τέλος
τέλος

"Περιλαμβάνουν" μίγματα σε μεθόδους στιγμιότυπων της Ενότητας στην Ενότητα / Κατηγορία λήψης.

class Thing
  περιλαμβάνουν το Squeaky
τέλος

Thing.new.squeak
# => "eep!"

"Επέκταση" αναμιγνύει τις μεθόδους εμφάνισης της Μονάδας στο αντικείμενο λήψης.

πράγμα = Object.new
thing.extend τσιρίζων
thing.squeak
# => "eep!"

Αν χρησιμοποιείτε τη μέθοδο "επέκταση" στο πλαίσιο μιας κλάσης, τότε οι μέθοδοι εμφάνισης της ενότητας θα καταστούν "μέθοδοι κλάσης" επειδή αναμειγνύονται στην κλάση που δεν είναι παρουσίες της κλάσης.

class OtherThing
  επέκταση Squeaky
τέλος

OtherThing.squeak
# => "eep!"
OtherThing.new.squeak
# => NoMethodError (μη προσδιορισμένη μέθοδος `squeak ')