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