Re: Verhalten von Modulen und Mixins
"Florian G. Pflug" <[email protected]> Sun, 26 Jan 2003 04:49:26 +0100
| Newsgroups | gmane.comp.lang.ruby.german |
|---|---|
| Message-ID | <[email protected]> |
On Sat, Jan 25, 2003 at 01:08:52PM -0500, [email protected] wrote: > Mit anderen Worten: was wir "Klassenmethoden" nennen, sind im > Wesentlichen Singleton-methoden eines Objects -- und zwar, eines > Objects, dessen Klasse "Class" ist. Yep... Und was wir instantmethoden nennen sind methoden eines Objects, dessen Klasse die oben genannte singleton-klasse ist. Diese singleton-ableitung von class, die die klassenmethoden enthält wird metaklasse genannt. class Foo end foo = Foo::new jetzt ist: foo: ---- Klasse: Foo Instanzvariablen: <list der instanzvariablen> Foo: ---- Klasse: Foo-Metaclass Instanzvariablen: <list der klassenvariablen von foo> Methoden: <liste der instanzmethoden von Foo bzw foo> Foo-Metaclass: -------------- Klasse: Class Instanzvariablen: <keine??> Methoden: <liste der klassenmethoden von Foo> Man kann mit diesen Dinge ein paar lustige Sachen anstellen - die include/extend sache is eine davon. Eine eine ist eine witztige methoden klassenmethoden zu definieren. class Foo class <<self def Bar puts "foobar end end end Foo::Bar #gibt "foobar" aus. Was ist passiert? Innerhalb der Klassendefinition von Foo ist "self" eine Referenz auf das Object, das die Klasse Foo repräsentiert. Mit "class <<aObject" kann man einem object methoden hinzufügen. Dabei wird intern eine anonyme subklasse der Klasse von aObject gebildet, in welche die methoden eingefügt werden. "class <<self" erzeugt daher eine anonyme ableitung der Klasse von Foo, also der Foo-Metaclass. Nun ist aber die Metaclass sowieso schon eine anonyme ableitung von Class, daher wird nicht nochmal abgeleitet, sondern gleich die metaklasse verwendet. In diese werden die methoden eingetragen, die innerhalb von "class <<self" deklariert werden, und diese werden damit zu Klassenmethoden. greetings, Florian Pflug PS: An [email protected]: Ich kann dir keine direkte mail schicken, deshalb hab ichs jetzt auf die Liste geposted. Ich hab ne isdn-dialup-leitung (allerdings flat-rate), und verwende _keinen_ smtp smarthost. Der mailserver deines providers hat meine mail rejected, weil er mails die direkt von dialup-usern kommen (und nicht über den mailserver des providers gehen) block. Diese ip-addressen entnimmt der mailserver der DUL (dial-up-list), zu finden auf www.mail-abuse.org Damit soll wohl spam verhindert werden - allerdings auf die brutale tour ;-) Dachte du solltest wissen, daà du von machen menschen e-mail-mäÃig nicht erreicht werden kannst.