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