Geen sleutelwoord, niet in Ruby-Doc Wat voor soort taal Construct is opnemen en uitbreiden?

Tenzij ik de inzendingen heb gemist, kan ik de include of uitbreiding niet vinden in de Ruby-Doc.ofg-documentatie of in Ruby's zoekwoofdenlijst. Ik kan obj.extend vinden, maar niet de extend-instructie die wofdt gebruikt in een klassedefinitie, bijvoofbeeld

# add module Foo's methods as class methods of TestClass
class TestClass
  extend Foo
end

of

# add module Foo's methods as instance methods of TestClass
class TestClass
  include Foo
end

Als een taalconstructie, als dat de juiste term is, wat zijn opnemen en uitbreiden en waar worden ze gedefinieerd?

Het zou leuk zijn om te begrijpen hoe deze twee uitspraken in de Ruby-taal worden geïmplementeerd. Bedankt.

1

2 antwoord

extend is an Object method, a convenience method for extend_object (more or less).

include is in Module, a wrapper around append_features.

2
toegevoegd
Dat wist ik niet.
toegevoegd de auteur John Bachir, de bron
@Dennis Geloof me - de syntaxis, klassehiërarchie en vaak subtiele magie maken het opsporen van de uitvoering van een gedrag ... soms problematisch. Het is als een avontuur zonder de overhead van plezier.
toegevoegd de auteur Dave Newton, de bron
@Dennis Hoewel het een beetje leuk is, op een ziekelijke, nerdige manier.
toegevoegd de auteur Dave Newton, de bron
@Dennis In ruby kunnen subklassen privémethoden aanroepen. Sommige referenties: ref 1 , ref 2 , ref 3 .
toegevoegd de auteur Dave Newton, de bron
@Dennis Geen probleem :)
toegevoegd de auteur Dave Newton, de bron
Ik heb gefaald om de self.extend-medewerker te maken met obj.extend in mijn bericht :).
toegevoegd de auteur Dennis, de bron
Dave nog een vraag als je het niet erg vindt: Klass.private_methods shows zijn als een van de private methodes voor Klass - zou jij of iemand anders kunnen uitleggen waarom een ​​object Klass toegang heeft tot een private methode van de Module-klasse? Heeft het iets te maken met Module
toegevoegd de auteur Dennis, de bron
Geweldige referenties - bedankt.
toegevoegd de auteur Dennis, de bron

include is een private methode van de klasse Module en extend is een methode in de klasse Object

0
toegevoegd