Re: Verhalten von Modulen und Mixins
[email protected] Sun, 26 Jan 2003 00:34:04 -0500 (EST)
| Newsgroups | gmane.comp.lang.ruby.german |
|---|---|
| Message-ID | <[email protected]> |
Hi -- On Sun, 26 Jan 2003, Florian G. Pflug wrote: > 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. Ich würde sagen, eine Instanzmethode sei eine Methode, die innerhalb einer Klasse (bzw. Module) definiert wird, und im Methodensuchpfad der Instanzen derselben Klasse steht. Ein Objekt, das nicht eine Klasse oder Module ist, hat nämlich nicht was man "Instanzmethoden" nennen würde -- wenigstens tut das Ruby nicht :-) irb(main):003:0> str = "abc" => "abc" irb(main):004:0> str.instance_methods NameError: undefined method `instance_methods' for "abc":String from (irb):4 irb(main):005:0> str.methods => ["clone", "next!", "reverse", "tr", .....] irb(main):006:0> String.methods => ["new", "superclass", "protected_instance_methods", "<=", ..... ] irb(main):007:0> String.instance_methods => ["clone", "next!", "reverse", "tr", ..... ] Was vom Perspektive der Klasse "instance_methods" sind, sind also vom Perspektive der Instanzen selber einfach "methods". > class Foo > end > foo = Foo::new > > jetzt ist: > foo: > ---- > Klasse: Foo > Instanzvariablen: <list der instanzvariablen> > > Foo: > ---- > Klasse: Foo-Metaclass 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 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. > Instanzvariablen: <list der klassenvariablen von foo> foo ist aber keine Klasse/Module, kann also keine Klassenvariablen besitzen. Die Instanzvariablen von Foo sind... die Instanzvariablen von Foo :-) irb(main):008:0> class Foo; @x = 1; end => 1 irb(main):009:0> Foo.instance_variables => ["@x"] > PS: An [email protected]: > ... > Dachte du solltest wissen, daß du von machen menschen > e-mail-mäßig nicht erreicht werden kannst. :-( Entropie herrscht.... Danke für deine hilfe im Postbereich. Ralf hat auch damit geholfen, und im Moment (wenn vielleicht nicht dauernd) ist es mir wieder möglich, zu dieser Liste zu posten. David -- David Alan Black home: [email protected] work: [email protected] Web: http://pirate.shu.edu/~blackdav