Re: Verhalten von Modulen und Mixins

[email protected] Sun, 26 Jan 2003 20:35:05 -0500 (EST)
Newsgroups gmane.comp.lang.ruby.german
Message-ID <[email protected]>
Hi --

On Mon, 27 Jan 2003, Florian G. Pflug wrote:

> On Sun, Jan 26, 2003 at 12:34:04AM -0500, [email protected] wrote:
> > Zwar ist Foo eine (die einzige) Instanz von Foo's Meta- oder
> > Singleton-class, doch gilt Class als Foo's "offizielle" Klasse:
> >
> >   irb(main):004:0> class Foo; end
> >   => nil
> >   irb(main):005:0> Foo.class
> >   => Class
> Foo.class scheint immer "Class" zurückzuliefern

Ja, wenn Foo eine Klasse ist :-)

> jedoch:
> ---------------------------------------
> class Foo
> 	puts "Foo:#{id}"
> 	class <<self
> 		puts "Foo(meta?):#{id}"
> 	end
> end
> puts "Class:#{Class.id}"
> ---------------------------------------
>
> liefert:
> Foo:538109020
> Foo(meta?):538105340
> Class:538134140

Ja, das sind drei verscheidene Objekte.

> und auch:
> --------------------------------------
> class Foo
> end
>
> foo = Foo::new
> puts "foo:#{foo.class.id}"
>
> class <<foo
> end
> puts "foo(singleton):#{foo.class.id}"
> --------------------------------------
>
> liefert:
> foo:538109020
> foo(singleton):538109020
>
> D.h, offenbar erkennt man nicht so leicht, ob die Klasse eines objects ne
> Singleton-Klasse(bzw anonyme klasse) ist, oder eine "normale" Klasse.
> Jedenfalls nicht mit aObject.class :-( matz versteckt ruby-interna sehr
> effektiv ;-))

Ja, denn die Rolle von obj.class ist, die offizielle, "historische"
Klasse des Objekts anzukündigen.  Ob die S-Klasse des Objekts schon
existiert oder nicht, bleibt seinem Klasse (was man (bzw. Ruby :-) mit
"die Klasse des Objekts" meint) ungeändert.

Nicht, dass die S-Klasse irgendwie "weniger" eine Klasse ist, als die
"historische" Klasse; bloss, es spielt eine verschiedene, etwas
phantomische Rolle im Lebenslauf des Objekts.

> > genauso wie die Klasse von foo nicht foo-Metaclass sondern Foo ist.
> > Jedes Objekt hat eine Singletonclass, die auch keine andere Rolle
> > spielt; deswegen ist es überflüssig, die Klasse eines Objekts als "des
> > Objekts Singletonclass" zu beschrieben.
> Ja, aber die Klasse der Klasse von foo (d.h die Klasse von Foo) ist die
> Foo-metaclass.
>
> Ich denke, nicht jedes Object hat ne singletonklasse als Klasse, sondern nur
> a) solche objekte, mit denen man "class <<aObject" gemacht hat

Ja, stimmt - aber man kann (so weit ich weiss) um die Existenz
derselben nicht probieren, ohne sie eine Existenz zu geben.  Deswegen
ist nicht zwischen Objekte, die eine S-Klasse haben, und die, die eine
nicht haben, bedeutungsvoll zu unterscheiden.

> b) Klassen, als objekte betrachtet haben ne singleton-ableitung von Class
> als Klasse

Das verstehe ich nicht -- wieso?


David

P.S. Wenn meine Botschaften auch im Mindesten kämpferisch oder
ungeduldig klingen, ist das eindeutig meinem Mangel an Herrschaft der
deutschen Sprache zuzuschreiben.  Ich finde den Wechsel sehr
interessant.

-- 
David Alan Black
home: [email protected]
work: [email protected]
Web:  http://pirate.shu.edu/~blackdav