Deklaration einer Klasse innerhalb eines Moduls

8

Vermessungsarbeitscode (in einem Modul namens Surveyor, nicht weniger), der versucht, es zu verstehen. Ich stieß auf diesen Abschnitt, der eine Klasse innerhalb eines Moduls enthält. Ist das das Gleiche wie das Modul? Wenn nicht, was ist der Vorteil, es so zu machen? Vielen Dank. (Bonuspunkte: Warum fügen wir uns selbst zur Klasse hinzu, ist das nicht schon angedeutet?)

%Vor%     
steve_gallagher 15.06.2012, 12:56
quelle

2 Antworten

15
  

Was ist der Vorteil, es so zu machen?

Es dient als Namespace so Klassen mit dem gleichen Namen kollidieren nicht (so hat es nichts zu mit Mixins machen). Es ist Standard.

  

Warum hängen wir uns selbst an die Klasse an, ist das nicht schon angedeutet?

Das ist nur eine der Möglichkeiten, von definierenden Klasse-Methoden (die anderes ist def self.method_name ).

    
tokland 15.06.2012, 13:00
quelle
11
  

Ist das das Gleiche wie das Modul?

Nein. Wenn Sie module Foo; end haben und dann tun

%Vor%

Sie erhalten eine Klasse Bar , die alle Methoden des Moduls Foo enthält. Aber wenn wir

machen %Vor%

Wir enden mit einer Klasse Foo::Bar , die keine der Methoden in Foo enthält, die nicht in Bar

sind
  

Was ist der Vorteil, es so zu machen?

Es ermöglicht Ihnen, Ihren Code zu organisieren, wenn es benötigt wird.

  

Warum hängen wir uns selbst an die Klasse an, ist das nicht schon angedeutet?

Nein, es ist nicht schon "impliziert". Dies entspricht der Definition jeder Methode in diesem Block mit self. like def self.mymethod; end . Siehe Klasse & lt; & lt; Selbstsprache in Ruby .

    
Andrew Marshall 15.06.2012 13:03
quelle

Tags und Links