[Ruby] Wie kann man ein Symbol in eine Referenz auf eine glob. Variable umwandeln?

OP #2589326
Ich habe ein Array mit Symbolen:
1
   $reset = [:$var1, :$var2]

Nun sollen die in $reset mit Symbolen benannten Variablen auf false 
gesetzt werden:
1
   $reset.each do |name|
2
      name = false
3
   end

Das funktioniert natürlich so nicht. Aber wie dann?

Wenn das Symbol ein Funktionsname ist, kann man die Funktion mit send 
aufrufen...

Hat jemand eine Idee?
Gast #2589399
Für Instance-Variablen mag ich das schon mal gelesen haben.

Aber es gibt ja neuerdings Suchmaschienen

"ruby access global variable name" liefert u.a.

http://stackoverflow.com/questions/5444198/ruby-setting-a-global-variable-by-name

Lesen werde ich das aber erst später...

Wie man vom Symbol zum String kommt sollte ja klar sein, mit .to_s und 
mit .to_sym zurück. Aber globale Variablen sollte man im Allgemeinen ja 
eher vermeiden.
Gast #2589454
Ja.mit eval geht das wohl. Das ohne eval aus
http://www.ruby-forum.com/topic/121228
kann ich so spontan nicht verstehen

stefan@AMD64X2 ~/ggg $ cat t.rb
#Ich habe ein Array mit Symbolen:

   $reset = [:$var1, :$var2]

#Nun sollen die in $reset mit Symbolen benannten Variablen auf false
#gesetzt werden:

#   $reset.each do |name|
#      name = false
#   end

$reset.each do |name|
  eval("#{name.to_s} = false")
end

puts $var1, $var2

$reset = [:var3, :var4]
$reset.each do |name|
  eval("$#{name.to_s} = false")
end

puts $var3, $var4


stefan@AMD64X2 ~/ggg $ ruby t.rb
false
false
false
false
stefan@AMD64X2 ~/ggg $
OP #2589502
Salewski, Stefan schrieb:
> Ja.mit eval geht das wohl. Das ohne eval aus
> http://www.ruby-forum.com/topic/121228
> kann ich so spontan nicht verstehen

Meinst du das hier: http://www.ruby-forum.com/topic/121228#541089 ?

Da wird wohl on the fly eine C-Funktion compiliert und in den Kernel 
eingebunden, die das macht.

> $reset = [:var3, :var4]
> $reset.each do |name|
>   eval("$#{name.to_s} = false")
> end
>
> puts $var3, $var4

Ja, eval ist für jede Sauerei gut... Danke für die Tipps.
OP #2589509
Pattex schrieb:
> Aber globale Variablen sollte man im Allgemeinen ja eher vermeiden.

Das kann man so pauschal nicht sagen.

In meinem Fall geht es um ein modular aufgebautes, kleines 
Generatorpaket, das aus html/js-Gerippen fertige html-Dateien 
produziert. Die Module stellen dem Generator über globale Variable 
Informationen zur Verfügung.

Das Ganze läuft auf rake.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.