Winfried Mueller | 14 Jun 21:30
Picon
Picon

Problem Klassenvariable überschreiben

Hallo,

ich habe ein Problem mit dem Überschreiben von Klassenvariablen.
Vielleicht hat ja jemand eine Idee, was ich da nicht richtig
sehe. Ich bin bisher davon ausgegangen, das bei einer
abgeleiteten Klasse man eine Klassenvariable überschreiben kann,
die dann nur für diese Klasse gültig ist. Das scheint aber nicht
so zu sein:

-snip
# Test Problematik Klassenvariable überladen
class Vater
  @@name = "Heribert"

  def Vater.name
    return @@name
  end
end

class Sohn < Vater
  @@name = "Thomas"
end

puts "Vater:" + Vater::name
puts "Sohn :" + Sohn::name

-snip

Dabei sollte eigentlich 
Vater: Heribert
(Continue reading)

Oliver Mensinger | 15 Jun 17:35
Picon

Re: Problem Klassenvariable überschreiben

Winni,

da Du klassenspezifische Werte speichern moechtest, solltest Du Instanzvariablen
verwenden, denn eine Klassenvariable ist auch fuer die Unterklassen global,
deshalb kommt zwei mal der zuletzt zugewiesene Wert heraus.

Oder verwende eine Klassen-Konstante (wenn sich der Wert, also der Name, nicht
mehr aendert), etwas so:

class Person
  def Person.name
    type::NAME
  end
end

class Vater < Person
  NAME = "Heribert"
end

class Sohn < Person
  NAME = "Thomas"
end

puts Vater::NAME -> Heribert
puts Sohn::NAME  -> Thomas

Aber auch das wuerde ich so nicht machen. Vielleicht eher so:

class Person
  @name
(Continue reading)

Pit Capitain | 17 Jun 15:19
Picon

Re: Klassenvariablen nicht erwartungskonform

Hallo Winfried,

> 3. Ich sehe keine Möglichkeit, wie man das Konzept  einer
> Klassenvariable, wie sie in UML üblich ist (Variable gehört zur
> Klasse und nicht zur Klassenhierarchie), in Ruby umsetzen kann.
> Für mein Beispiel brauchte ich eine Konstante, was sich über eine
> Klassenmethode lösen lies. Braucht man aber eine Variable, fällt mir
> keine Lösung ein.

Dann lies noch mal ein paar der Antworten durch. Stichwort "class-
instance-variable", in der Syntax nur ein "@". Die @@ Variablen 
sind in der Tat merkwürdig. Ich habe sie bisher noch nicht 
verwendet.

Gruß,
Pit
Winfried Mueller | 18 Jun 01:18
Picon
Picon

Re: Klassenvariablen nicht erwartungskonform

Hallo Pit,

>Dann lies noch mal ein paar der Antworten durch. Stichwort "class-
>instance-variable", in der Syntax nur ein "@". Die @@ Variablen 
>sind in der Tat merkwürdig. Ich habe sie bisher noch nicht 
>verwendet.

Oh je, ich hab deine vorherige Mail nicht richtig gelesen, sorry.
Ich hatte das @ gesehen und sofort an eine Objekt-Instanz
Variable gedacht anstatt es genauer zu betrachten.

Das ist in der Tat was ganz neues für mich. Kann ich mir noch gar
nicht recht vorstellen, vor allem weil es ja
Namensüberschneidungen mit Instanzvariablen gibt. In den Büchern
habe ich dazu auch nichts gefunden. Werde ich morgen aber mal
testen. Heute ists zu spät.

Vielen Dank nochmal für den Hinweis. 

Winfried
Winfried Mueller | 17 Jun 13:55
Picon
Picon

Klassenvariablen nicht erwartungskonform

Hallo, 

vielen Dank erstmal an alle, die mir so schnell bei dem Problem
geholfen haben.

Hier noch einige Hinweise, die ich mal zur Diskussion stelle:

1. Klassenvariablen verhalten sich m.E. nicht erwartungskonform.
In C++ bspw.  ist es so, das Klassenvariablen - wie der Name
schon sagt - mit der Klasse verbunden sind. Sie werden zwar mit
vererbt, trotzdem hat jede Klasse seine eigene Instanz dieser
Variablen. In Ruby gibt es nur eine Instanz für alle Klassen in
der Vererbungshierarchie - das ist ein anderes Konzept wie ich es
aus der OO-Programmierung kenne. Die UML sagt bspw zu
Klassenattribut..."liegt vor, wenn nur ein Attributwert für alle
Objekte einer Klasse existiert." Hier steht also einer Klasse und
nicht der ganzen abgeleiteten Klassen. Gleiches steht in
"Programmierung in Ruby". 

Das gewählte Konzept verwirrt auch, weil sich Klassenmethoden
anders verhalten. Diese gilt nämlich genau für diese Klasse und
nicht für alle Klassen einer Klassenhierarchie. Überlädt man eine
Klassenmethode in einer abgeleiteten Klasse, betrifft das nicht
gleich die ganze Hierarchie.

Es ist auch fehleranfällig und führt zu Seiteneffekten. Ich
glaube deshalb, das es ein Fehler in der Implementierung von Ruby
ist, das dieses Verhalten nicht bewußt angestrebt wurde.

2. Konstanten in Klassen verhalten sich eher wie Klassenvariablen
(Continue reading)

clemens fischer | 25 Jun 11:22
Picon

Re: Klassenvariablen nicht erwartungskonform

> Winfried Mueller:

> 1. Klassenvariablen verhalten sich m.E. nicht erwartungskonform.

die diskussion hier hat mich als anfaenger total verwirrt.  deshalb moechte
ich jetzt folgendes wissen:

wie realisiert man eine variable,

- die in jeder instanz einer klasse getrennt existiert?

- die in einer klasse fuer alle ihre instanzen global ist?

- die fuer jede abgeleitete klasse global ist?

- und was koennte man sich sonst noch wuenschen?  ich meine damit auch die
  sichtbarkeitsregeln und accessoren!

ausserdem wuesste ich gerne, welche bedeutung UML hat.  diese sprache habe
ich eben erst nach-gegooglet, vorher kannte ich das nicht.  und wie
unterscheiden sich klassen- und instanzvariablen zwischen ruby und java,
C++ auf der anderen seite?

--

-- 
clemens fischer
Winfried Mueller | 8 Jul 20:30
Picon
Picon

Re: Klassenvariablen nicht erwartungskonform

Hallo Clemens,

>ausserdem wuesste ich gerne, welche bedeutung UML hat.  diese sprache habe
>ich eben erst nach-gegooglet, vorher kannte ich das nicht.  

UML ist eine abstrakte Modellierungssprache für
objektorientiertes Design. Wenn die Dinge komplizierter werden,
als das man sie sofort reinhacken kann, wenn man sich die
Struktur eines Programmes genauer überlegen muß und wenn man weit
vorausschauenden Code schreiben will, der sich nicht alle Nase
lang ändert, dann braucht man solch eine Modellierungssprache.

Die UML ist an keine objektorientierte Sprache gebunden, es
werden einfach die Konzepte abgebildet, die in jeder OO-Sprache
zu finden sind oder zu finden sein sollten. Es gibt Werkzeuge wie
Rational Rose, die dann aus den erstellten Diagrammen echten Code
erstellen können, wahlweise in einer der unterstützten Sprachen. 

UML ist *DIE* Designsprache, wenn es um OO-Design geht.

Wenn ich Programme schreibe, male ich mir öfters mal ein paar
Diagramme auf ein Papier, um die Beziehungen klarer und
wohlstrukturierter hinzubekommen. Vieles ensteht aber auch gleich
im Editor. Wie gesagt, nur wenns mir zu kompliziert wird oder
wenn der Code gut durchdacht sein muß, weil das Design lange so
bleiben muß (bspw. Bibliotheken, der Schnittstellen sich nicht so
oft ändern sollten.).

..Winfried..
(Continue reading)

Christoph | 26 Jun 08:51
Picon

RE: Klassenvariablen nicht erwartungskonform

> clemens fischer
...
> wie realisiert man eine variable,
> 
> - die in jeder instanz einer klasse getrennt existiert?

---
p self  # => main

# also ist

@me = 42

# eine Instanz-Variable des Top-Objekts main 
# (eine Instanz der Klasse Object) 
# wobei @me == 42

class B
   def initialize(x)
      # self ist ein zu initialisierendes
      # B Object  
      @x = x
      @y = self
   end
end

a = Object.new
b = B.new(a)

p b.instance_variables # => ["@y","@x"]
(Continue reading)

clemens fischer | 26 Jun 15:35
Picon

Re: Klassenvariablen nicht erwartungskonform

> Christoph:

> [beispiele zur demonstration von vererbung und klassenvariablen]
> p self  # => main

ok, vielen dank, das werde ich mir in ruhe ansehen.  eins draengt mich aber
sehr:  ich finde nirgends eine beschreibung fuer "rhs"!  ausserdem wuesste
ich gerne, was es mit den "attr_..." attributen auf sich hat.  duerfte es
die denn eigentlich garnicht geben?

--

-- 
clemens fischer
Christoph | 26 Jun 17:37
Picon

RE: Klassenvariablen nicht erwartungskonform

> clemens fischer
...
> Sent: Wednesday, June 26, 2002 3:35 PM
> To: ruby-de <at> bttr.org
> Subject: Re: [ruby-de] Klassenvariablen nicht erwartungskonform
> 
> > Christoph:
> 
> > [beispiele zur demonstration von vererbung und klassenvariablen]
> > p self  # => main
> 
> ok, vielen dank, das werde ich mir in ruhe ansehen.  eins draengt mich
> aber
> sehr:  ich finde nirgends eine beschreibung fuer "rhs"!  ausserdem
wuesste

rhs == r(ight)h(and)s(ight) ist nur ein Variablen Name

> ich gerne, was es mit den "attr_..." attributen auf sich hat.  duerfte
es
attr_... ist eine eingebaute Abkürzung für

class A
   def whatever
	@whatever
   end
end

ist äquivalent zu

(Continue reading)

Christoph | 26 Jun 18:35
Picon

RE: Klassenvariablen nicht erwartungskonform

> Christoph
...
> rhs == r(ight)h(and)s(ight) ist nur ein Variablen Name

aehhm, wohl eher r(ight)h(and)s(ide)
Winfried Mueller | 17 Jun 13:55
Picon
Picon

Re: [ruby-de] Problem Klassenvariable überschreiben

Hallo Oliver,

mein Beispiel ist schlecht gewählt und verleitet natürlich sofort
dazu, ein Instanzvariable zu benutzen anstatt einer
Klassenvariable. Das ursprüngliche Problem ging aber in die
Richtung, wo eine Klassenvariable angebracht war:

- snip --
# Code nicht getestet, nur gerade eingehackt, um das Problem
# verständlich zu machen
class Word
  @@pattern = Regexp( "" )
  def Word.isIt( line )
    if line =~ @@pattern
      return TRUE
    else
      return FALSE
    end
  end
end

class Section < Word
  @@pattern = Regexp( "^Section(.*)$" )
end

class Type < Word
  @@pattern = Regexp( "^type(.*)$" )
end

puts Section::IsIt( "Section hardware.isdn" )  >> TRUE
(Continue reading)

Oliver Mensinger | 17 Jun 15:55
Picon

Re: Re: [ruby-de] Problem Klassenvariable überschreiben

Hallo Winfried!

Okay, jetzt ist klar warum! Also Deine letzte Loesung gefaellt mir sehr gut! Das
werde ich mir gut merken!
Genau, Konstanten muessen immer qualifiziert werden.

Das Beispiel von Pit ist doch aber auch eine Loesung fuer Dein Problem (und
braucht nicht die zu ueberschreibene Klasse):
>class Vater2
>  @name = "Heribert"
>
>  def Vater2.name
>    return @name
>  end
>end
>
>class Sohn2 < Vater2
>  @name = "Thomas"
>end

Hier geht auch:
   puts "Vater2:" + Vater2.name
   puts "Sohn2:" + Sohn2.name

Sehr schoene Loesung!

Weisst Du denn zufaellig wie man ein Ueberschreiben von Methoden erzwingen
kann??

Das Object#type gibt die Klasse des Objekts zurueck - ist fuer mich auch neu.
(Continue reading)

Pit Capitain | 14 Jun 23:25
Picon

Re: [ruby-de] Problem Klassenvariable überschreiben

Hallo Winni.

> ich habe ein Problem mit dem Überschreiben von Klassenvariablen.
> (...)

Mir fallen momentan zwei Alternativen ein, wobei ich die zweite 
bevorzuge, da sie für mich klarer ist.

Klassenvariablen (werden von allen Unterklassen geteilt, es sei 
denn, die in den Unterklassen werden vor den in der Superklasse 
definiert):

class Vater
end

class Sohn < Vater
  @@name = "Thomas"
end

class Vater
  @@name = "Heribert"

  def Vater.name
    return @@name
  end
end

puts "Vater:" + Vater::name
puts "Sohn :" + Sohn::name

(Continue reading)

Pit Capitain | 18 Jun 22:32
Picon

=?ISO-8859-1?Q?Re:_[ruby-de]_Re:_[ruby-d e]_Problem_Klassenvariable_=FCberschreiben?=

Hallo Marko,

> Das funktioniert bei mir nicht (ruby 1.6.7). Es wird zweimal
> "Heribert" ausgegeben. Hätte mich auch gewundert, wenn es etwas
> verändert hätte. 

scheint, dass ich mal upgraden sollte. Bei mir

ruby 1.6.6 (2001-12-26) [i586-mswin32]

kommt Heribert und Thomas. Ich kann mich dunkel an eine 
entsprechende Diskussion auf ruby-talk erinnern, und dass Matz 
mit den Klassen-Variablen auch nicht glücklich war. Vielleicht ist 
das bei 1.6.7 schon geändert worden.

Danke für den Hinweis,
Pit
clemensF | 19 Jun 14:46
Picon

Re: Re: [ruby-de] Re: [ruby-d e] Problem Klassenvariable überschreiben

> Pit Capitain:

> ruby 1.6.6 (2001-12-26) [i586-mswin32]
> 
> kommt Heribert und Thomas. Ich kann mich dunkel an eine 
> entsprechende Diskussion auf ruby-talk erinnern, und dass Matz 
> mit den Klassen-Variablen auch nicht glücklich war. Vielleicht ist 
> das bei 1.6.7 schon geändert worden.

dann ist er gluecklicher, wenn /weniger/ bei 'rauskommt?

--

-- 
clemens fischer
Pit Capitain | 19 Jun 23:14
Picon

=?ISO-8859-1?Q?Re:_[ruby-de]_Re:_[ruby-d e]_Re:_[ruby-d e]_Problem_Klassenvariable_=FCber schreiben?=

On 19 Jun 2002, at 14:46, clemensF wrote:

> >  Ich kann mich dunkel an eine 
> > entsprechende Diskussion auf ruby-talk erinnern, und dass Matz mit
> > den Klassen-Variablen auch nicht glücklich war. Vielleicht ist das
> > bei 1.6.7 schon geändert worden.
> 
> dann ist er gluecklicher, wenn /weniger/ bei 'rauskommt?

Ich würde auch sagen, dass 1.6.7 weniger hat, allerdings weniger 
Fehler :-)

Dass das ursprüngliche Beispiel bei 1.6.6 überhaupt mit Tricks 
zum Laufen gebracht werden kann, bei 1.6.7 aber nicht mehr, 
muss man nicht als "weniger" (Funktionalität) interpretieren. Die 
beispielsweise von Java bekannten Klassen-Variablen entsprechen 
bei Ruby den Klassen-Instanz-Variablen (mit einem @). Die 
gewünschte Funktionalität ist also da, es gibt nur ein Problem mit 
der Benennung.

Etwas wie die Klassen-Variablen von Ruby (mit @@) gibt es in 
Java nicht: Variablen, die nicht nur zu einer Klasse, sondern zu 
einer ganzen Klassenhierarchie gehören. Deren Verhalten ist bei 
1.6.7 korrigiert worden. Nun spielt es anscheinend keine Rolle 
mehr, in welcher Reihenfolge die Klassen-Variablen definiert 
werden, so wie es noch bei 1.6.6 der Fall war.

Weniger ist oft mehr.

Gruß,
(Continue reading)

Pit Capitain | 24 Jun 14:36
Picon

Re: [ruby-de] Re: [ruby-de] Re: [ruby-de] Re: [ruby-d e] Re: [ruby-d e] Problem Klassenvariable über schreiben

Hallo Winfried.

> >Die
> >beispielsweise von Java bekannten Klassen-Variablen entsprechen bei
> >Ruby den Klassen-Instanz-Variablen (mit einem @). Die gewünschte
> >Funktionalität ist also da, es gibt nur ein Problem mit der
> >Benennung.
> 
> Es gibt noch ein weiteres gravierendes Problem, was ich aus C++
> nicht kenne: Man kann auf Klassen-Instanz-variablen nicht von
> Instanzmethoden zugreifen, sondern nur von Klassenmethoden.
> 
> Folgendes geht also nicht:
> 
> class Foo
>   @classid = '034949983'
>   def getClassId
>     return @classid
>   end  
> end
> 
> aFoo = Foo.new
> aFoo.getClassId     #gewünscht wäre: >> 034949983

Stimmt, daran hatte ich nicht gedacht.

Wofür möchtest du die Variablen einsetzen? Vielleicht gibt es ja 
dafür einen anderen Weg in Ruby.

Gruß,
(Continue reading)

Winfried Mueller | 24 Jun 11:47
Picon
Picon

Re: [ruby-de] Re: [ruby-de] Re: [ruby-d e] Re: [ruby-d e] Problem Klassenvariable über schreiben

Hallo,

>muss man nicht als "weniger" (Funktionalität) interpretieren. Die 
>beispielsweise von Java bekannten Klassen-Variablen entsprechen 
>bei Ruby den Klassen-Instanz-Variablen (mit einem @). Die 
>gewünschte Funktionalität ist also da, es gibt nur ein Problem mit 
>der Benennung.

Es gibt noch ein weiteres gravierendes Problem, was ich aus C++
nicht kenne: Man kann auf Klassen-Instanz-variablen nicht von
Instanzmethoden zugreifen, sondern nur von Klassenmethoden.

Folgendes geht also nicht:

class Foo
  @classid = '034949983'
  def getClassId
    return @classid
  end  
end

aFoo = Foo.new
aFoo.getClassId     #gewünscht wäre: >> 034949983

..Winfried..
--
:: Integrales Handeln Dortmund ::
Pit Capitain | 23 Jun 17:25
Picon

=?ISO-8859-1?Q?Re:_[ruby-de]_RE:_[ruby-de]_Re:_[ruby-de]_Re:_[ruby-d e]_Re:__[ruby-d e]_Problem_Klassenvariable_=FCber schreiben?=

Hallo Christoph, du schreibst zu Klassen-Variablen

> Das ist so nicht richtig
> (...)

Vielen Dank für die Klarstellung und die vielen Beispiele. Eine 
Frage habe ich aber noch an den Spezialisten ;-)

Wofür braucht man deiner Erfahrung nach Klassen-Variablen, bzw. 
was kann man mit Klassen-Variablen machen, was sonst gar nicht 
oder nur umständlich möglich wäre?

Gruß,
Pit
Christoph | 26 Jun 08:23
Picon

RE: [ruby-de] Re: [ruby-de] RE: [ruby-de] Re: =?iso-8859-1?Q?=5Bruby-de=5D_Re:_=5Bruby-d e=5D_Re:__=5Bruby-d e=5D_P?= =?iso-8859-1?Q?roblem_Klassenvariable_=FCber schreiben?=

> From: ruby-de-admin <at> bttr.org 
...
> Wofür braucht man deiner Erfahrung nach Klassen-Variablen, bzw.
> was kann man mit Klassen-Variablen machen, was sonst gar nicht
> oder nur umständlich möglich wäre?

Klassen-Variablen sind sehr nuetzlich da sie in allen Instanz 
sowie Klassen-Methoden (im Normal-Gebrauch) sichtbar sind. Solange
das leidige Vererbungs-Verhalten in der Anwendung unwesentlich
oder sogar nützlich ist (oft sind dann Klassen-Konstanten 
die richtige Lösung), sind Klassen-Variablen Klassen-Instanz-Variablen
oftmals vorzuziehen, insbesondere da der Gebrauch der Letzteren 
(meiner Meinung nach) Anfänger überfordert und Fortgeschrittenen 
die Zeit stielt.

/Christoph
Pit Capitain | 24 Jun 11:54
Picon

=?ISO-8859-1?Q?Re:_[ruby-de]_Re:_[ruby-de]_RE:_[ruby-de]_Re:_[ruby-de]_Re:_[ruby-d e]_Re:__[ruby-d e]_Problem___Klassenvariable_=FCber schreiben?=

On 23 Jun 2002, at 20:07, Armin Roehrl wrote:

> Am Sonntag, 23. Juni 2002 17:25 schrieb Pit Capitain:
> > Wofür braucht man deiner Erfahrung nach Klassen-Variablen, bzw. was
> > kann man mit Klassen-Variablen machen, was sonst gar nicht oder nur
> > umständlich möglich wäre?
> z.b. kann man so sehr einfach zählen wieviele Instanzen von einer
> Klasse man hat.

Danke für den Hinweis. Werde ich mir bei Gelegenheit mal näher 
zu Gemüte führen.

Gruß,
Pit
Armin Roehrl | 23 Jun 20:07
Picon

Re: Re: [ruby-de] RE: [ruby-de] Re: [ruby-de] Re: =?iso-8859-1?q?=5Bruby-d e=5D=20Re=3A=20=20=5Bruby-d e=5D=20Problem=20?= Klassenvariable =?iso-8859-1?q?=FCber schreiben?=

Am Sonntag, 23. Juni 2002 17:25 schrieb Pit Capitain:
> Wofür braucht man deiner Erfahrung nach Klassen-Variablen, bzw.
> was kann man mit Klassen-Variablen machen, was sonst gar nicht
> oder nur umständlich möglich wäre?
z.b. kann man so sehr einfach zählen wieviele Instanzen von einer
Klasse man hat.
Winfried Mueller | 24 Jun 12:16
Picon
Picon

Re:

Hallo,

>> Wofür braucht man deiner Erfahrung nach Klassen-Variablen, bzw.
>> was kann man mit Klassen-Variablen machen, was sonst gar nicht
>> oder nur umständlich möglich wäre?
>z.b. kann man so sehr einfach zählen wieviele Instanzen von einer
>Klasse man hat.

Nee, das geht nun eben nicht mit Klassen-Variablen sondern eher
mit Klassen-Instanz-Variablen. Klassen-Variablen sind globale
Variablen, die aber nur von der Klasse und deren Ableitungen
gesehen werden. Zählst du in 'Vater' hoch, wird in 'Sohn'
ebenfalls hochgezählt. Es ist die selbe Variable in allen
Ableitungen.

Ich könnte aber bspw. sagen, ich habe ein Basisklasse Person,
wovon sich dann Personal, Kunden, Lieferanten usw. ableiten. Und
in Person steckt eine Klassenvariable die @@anzahl heißt. Dort
könnte gespeichert werden, wieviele Personen schon angelegt sind,
egal ob nun Personal, Kunden...

..Winfried..
--
:: Integrales Handeln Dortmund ::
Christoph | 22 Jun 17:56
Picon

=?iso-8859-1?Q?RE:_=5Bruby-de=5D_Re:_=5Bruby-de=5D_Re:_=5Bruby-d e=5D_Re:?= =?iso-8859-1?Q?_=5Bruby-d e=5D_Problem_Klassenvariable_=FCber schreiben?=


> Pit Capitain
...
> Dass das ursprüngliche Beispiel bei 1.6.6 überhaupt mit Tricks zum 
> Laufen gebracht werden kann, bei 1.6.7 aber nicht mehr, muss man nicht

> als "weniger" (Funktionalität) interpretieren. Die beispielsweise von 
> Java bekannten Klassen-Variablen entsprechen bei Ruby den 
> Klassen-Instanz-Variablen (mit einem @). Die gewünschte Funktionalität

> ist also da, es gibt nur ein Problem mit der Benennung.
> 
> Etwas wie die Klassen-Variablen von Ruby (mit @@) gibt es in Java 
> nicht: Variablen, die nicht nur zu einer Klasse, sondern zu einer 
> ganzen Klassenhierarchie gehören. Deren Verhalten ist bei 1.6.7 
> korrigiert worden. Nun spielt es anscheinend keine Rolle mehr, in 
> welcher Reihenfolge die Klassen-Variablen definiert werden, so wie es 
> noch bei 1.6.6 der Fall war.

Das ist so nicht richtig. Die Reihenfolge ist immer noch
sehr wichtig das Beispiel bringt dies allerdings nicht
heraus. (In 1.7 bekommst du eine Warnung wenn du auf der
``unsinnige Reihenfolge’’ insistierst.) Klassen-Variablen
sind eigentlich globale Variablen die allerdings nicht in
allen ``Namens-Räumen’’ sichtbar sind, wobei ein ``Namen-Raum’’
eine Klasse oder Module sein kann. (Ich verwende den Terminus 
Klassen-Variable synonym für die artverwandte Modul-Variable).
Die Sichtbarkeits-Regel für Rubys Klassen-Variablen und
Konstanten sind offenbar Smalltalk entlehnt (static or global
scope) und haben mit den Sichtbarkeits-Regeln von C++ oder Java
(Continue reading)

Winfried Mueller | 24 Jun 12:16
Picon
Picon

Re: [ruby-de] RE: [ruby-de] Re: [ruby-de] Re: [ruby-d e] Re: [ruby-d e] Problem Klassenvariable über schreiben

Hallo Christoph,

[...]
># Autmatisierte Version
>
>class Class
>  def class_attr_accessor (sym, instance_visibility = protected, 
>                           class_visibility  = private )
>    class_eval <<-attr_body
>      #{instance_visibility} 
>      def #{sym.to_s}; type.#{sym.to_s} end
>      def #{sym.to_s}=(rhs); type.#{sym.to_s}=(rhs) end
>    attr_body
>    class << self; self end.send(:attr_reader,sym,class_visibility)
>    class << self; self end.send(:attr_writer,sym,class_visibility)
>  end
>end
[...]

Da schlackern mir ja die Ohren, wenn ich Deine Beispiele sehe.
Ich dachte, ich hätte schon ein wenig Durchblick, was ruby
angeht. Jetzt weiß ich, ich weiß noch sehr wenig.

Brauch wohl jetzt einige Zeit, um Deine Code zu verstehen...

alle Achtung

Winni
--
:: Integrales Handeln Dortmund ::
(Continue reading)

Marko Schulz | 18 Jun 03:54
Picon

Re: Re: [ruby-de] Problem Klassenvariable überschreiben

On Fri, Jun 14, 2002 at 11:25:34PM +0200, Pit Capitain wrote:
> 
> Klassenvariablen (werden von allen Unterklassen geteilt, es sei 
> denn, die in den Unterklassen werden vor den in der Superklasse 
> definiert):
> 
> class Vater
> end
> 
> class Sohn < Vater
>   @@name = "Thomas"
> end
> 
> class Vater
>   @@name = "Heribert"
>   
>   def Vater.name
>     return @@name
>   end
> end
> 
> puts "Vater:" + Vater::name
> puts "Sohn :" + Sohn::name

Das funktioniert bei mir nicht (ruby 1.6.7). Es wird zweimal
"Heribert" ausgegeben. Hätte mich auch gewundert, wenn es etwas
verändert hätte. 

--

-- 
marko schulz
(Continue reading)


Gmane