Sagen, ich habe diesen Hash:Rubin wiederum Werte in einem Hash in lokale Variablen
entry = {"director"=>"Chris Nolan", "prducer"=>"Sum Duk", "writer"=>"Saad Bakk"}
Ich mag jeden Schlüssel in seine eigenen lokalen Variable mit dem zugehörigen Wert extrahieren:
director = "Chris Nolan"
producer = "Sum Duk"
...
Durch die Verwendung von eine Schleife und nicht:
director = entry["director"]
Da gibt es viele Werte und ich möchte sie nicht einzeln machen.
Ich fand das fast perfekt funktioniert, außer es erstellt eine Instanzvariable und ich möchte eine lokale Variable, aber local_variable_set
existiert aus irgendeinem Grund nicht.
entry.each_pair { |k, v| instance_variable_set("@#{k}", v) }
Gibt es eine Lösung? Oder ist das nicht möglich, eine Instanzvariable in eine lokale Variable umzuwandeln und die Instanz zu löschen, ohne sie einzeln auszuführen?
Gibt es Gründe, sie kann nicht im Hash bleiben und von dort aus zugegriffen werden? Vermutlich verwenden Sie die lokalen Variablen später - wäre es nicht genauso einfach, die Hashwerte zu verwenden? – Pavling
Wenn Sie Rails (oder nur ActiveSupport) verwenden, können Sie den folgenden Einzeiler verwenden: 'director, producer, writer = entry.values_at ('director', 'producer', 'writer')'. Es ist bedauerlich, dass Sie jeden Variablennamen zweimal eingeben müssen (anstelle von null Mal, wie Sie es verlangten), aber es ist immer noch der prägnanteste Weg, den ich gefunden habe, um dies zu tun. – antinome
mögliche Duplikate von [Wie dynamisch eine lokale Variable zu erstellen?] (Http://stackoverflow.com/questions/18552891/how-to-dynamically-create-a-local-variable) – Ajedi32