2017-01-17 4 views
-8

ich so durch Variablen mit Namen wiederholen müssen:Looping durch Variablen in Ruby

variable1 
variable2 
variable3 
... 
variable15 

Wie kann ich das tun?

+3

[so] nicht ein Code ist, Schreibservice. Wenn Sie möchten, dass jemand Ihre Arbeit für Sie erledigt, gibt es viele Stellen im Internet, an denen Sie Programmierer einstellen können. Ich schicke Ihnen gerne ein Angebot! Sie müssen das Problem, das Sie haben, beschreiben, die Schritte, die Sie unternommen haben, um das Problem zu lösen, Ihren Code zeigen, die Fehlermeldung, die Sie erhalten, alle Warnungen, die Sie erhalten, zeigen uns die erwarteten und tatsächlichen Ergebnisse aus Ihrem Code Testfälle und eine Spezifikation für das, was Ihr Code tun sollte. Kurz gesagt, Sie müssen ein [mcve] bereitstellen. Sie sollten auch [fragen] lesen und die [Tour] machen. –

+0

Die Anzahl der Variablen und ihre Namen geben an, dass Sie ein Array oder einen Hash zum Speichern der Werte verwenden sollten. – Stefan

Antwort

5

Vor allem scheint es wie ein sehr schlechtes Design. Wenn Ihre Daten iteriert werden sollen, müssen Sie eine geeignete Datenstruktur verwenden (Ruby hat Hash und Array in der Standardbibliothek).

Sie können es aber tun. Es gibt eval und ein bisschen mehr idiomatische local_variable_get Methoden, die helfen könnten.

v1 = 1 
v2 = "chair" 
v3 = :boo 

(1..3).each do |i| 
    puts binding.local_variable_get("v#{i}") 
end 
#=> 1 
#=> chair 
#=> boo 

Aber wieder sind sie beide sehr spezielle Werkzeuge und sie sollen in diesem Fall nicht verwendet werden. Sie sollten Ihren Ansatz überdenken. Wenn die Anzahl der Variablen nicht groß ist und jede Variable einen eigenen Sinn hat, können Sie vor dem Iterieren ein Array erstellen.

[v1, v2, v3].each{ |v| puts v } 

Anderer Ansatz ist es, ein Array nur von Anfang an zu verwenden. Stattdessen nummerierte Verwendung von Variablen finden Sie Indizes der Array verwenden:

my_data = [] 
my_data[0] = 1 
my_data[1] = "chair" 
my_data[2] = :foo 

my_data.each{ |v| puts v } 

Oder können Sie eine Hash verwenden, wenn Sie Ihre Daten soll namentlich genannt werden:

my_data = {} 
my_data[:first] = 1 
my_data[:second] = "chair" 
my_data[:third] = :foo 

my_data.each{ |k, v| puts k, v } 
+0

Erste Schleife hat es für mich gemacht. Ich kann Array nicht wirklich verwenden, aber ich will es hier nicht erklären, weil das Problem tief in meinem Programm liegt und es Limitierung ist. – Kappa