Re: Fragen zum Konstruktordesign.

Mauricio Fernández <[email protected]> Fri, 4 Apr 2003 14:17:03 +0200
Newsgroups gmane.comp.lang.ruby.german
Message-ID <[email protected]>
On Thu, Apr 03, 2003 at 12:54:57PM +0100, [email protected] wrote:
> Hallo Mauricio.
> Danke fuer Deine schnelle Antwort.

[Bitte um Verziehung, ich kann besser Ruby als Deutsch :-)]
 
> Deine erste Loesung gefaellt mir am besten. Allerdings habe ich noch ne Frage.
> Wenn ich das richtig verstehe, dann ist init private. init duerfte ich doch 
> dann nur aus Foo aufrufen. Bei meinem Design warf ruby mir einen Fehler um 
> die Ohren, dass ich doch bitte nicht eine private Methode aufrufen soll.
> 
> Muss ich die Klassen Methoden mit "class << self"-Trick schreiben, oder liegt 
> das an send? Beides kann ich mir nicht recht vorstellen. Warum geht es aber 
> trozdem? 

Private Methoden können mit obj.send(:meth,*params) aufgerufen werden.
"class << self; def foo; end; end" hat damit nichts zu tun, das ist nur
eine andere Möglichkeit für "def self.foo"

z.B., 

 class A
   def A.foo
   end
 end

 class << A
   def foo
   end
 end

 class A
   class << self
     def foo
     end
   end
 end

und

 class A
   def self.foo
   end
 end

machen alle dasselbe.

class << self ist eine gewöhnliche Ausdrucksweise:

wir können immer singleton Methoden zu Objekten hinzufügen. Klassen
Methoden sind nur singleton Methoden der Objekten, die die Klassen
darstellen. Deshalb ist es möglich, Klassenmethoden zu definieren, wie
folgt:

class << A
  def foo; end
end

oder...

class A
  # hier ist 'self' das 'Klassenobjekt' (?)  A
  # deshalb können wir class << self benutzen, um eine Klassenmethode
  # mit der singleton Klass des Objekts A, dessen Klasse 'Class' ist,
  # zu definieren.
  class << self    # wie class << A!!
    def foo; end
  end  
end

Tut mir Leid, dass ich das auf Deutsch nicht besser erklären kann. ;-)

-- 
 _           _                             
| |__   __ _| |_ ___ _ __ ___   __ _ _ __  
| '_ \ / _` | __/ __| '_ ` _ \ / _` | '_ \ 
| |_) | (_| | |_\__ \ | | | | | (_| | | | |
|_.__/ \__,_|\__|___/_| |_| |_|\__,_|_| |_|
	Running Debian GNU/Linux Sid (unstable)
batsman dot geo at yahoo dot com

"You, sir, are nothing but a pathetically lame salesdroid!
I fart in your general direction!"
	-- Randseed on #Linux