2017-05-16 1 views
0

Ich habe einen Hash wie dies zu tun:Wie Masse variable Zuordnung

user_info = { 
    user_id: 1, 
    first_name: "Henry", 
    last_name: "Avery", 
    phone_number: 1234567890, 
    address: "United Kingdom", 
} 

Wenn ich diesen Hash zu erhalten, muss ich diese vielen Variablen wie zuweisen:

user_id = user_info[:user_id] 
first_name = user_info[:first_name] 
last_name = user_info[:last_name] 
phone_number = user_info[:phone_number] 
address = user_info[:address] 

Es ist ärgerlich, und macht Der Code enthält mehr unnötige Zeilen. Auch wenn ich sie alle in einem Satz gesagt, es chaotisch werden, wobei die Linie zu lang:

user_id, first_name, last_name, phone_number, address = user_info[:user_id], user_info[:first_name], user_info[:last_name], user_info[:phone_number], user_info[:address] 

Kennen Sie einen schnelleren Weg, um die Hash-Variablen zuweisen?
Vielen Dank.

+1

Nein, das ist über das Beste, was Sie bekommen können, ohne die Sicherheit zu gefährden. –

+0

Entschuldigung, was ist mit der Sicherheit in diesem Fall? – BraveVN

+1

Um diesen Code weiter zu verkürzen, müsste man auf eine explizite Auflistung der Attribute verzichten und der Code würde "nehmen, was auch immer in diesem Hash ist und einige Variablen daraus machen". Dies ist besonders gefährlich bei dynamischen lokalen Variablen, für die ich ziemlich sicher bin, dass Sie 'eval' für verwenden müssen (was nicht verwendet werden sollte, wenn keine Vorkehrungen getroffen werden und es einen legitimen Grund gibt, was hier nicht der Fall ist). –

Antwort

1

Diese Linie

user_id, first_name, last_name, phone_number, address = user_info[:user_id], user_info[:first_name], user_info[:last_name], user_info[:phone_number], user_info[:address] 

konnte

user_id, first_name, last_name, phone_number, address = user_info.values_at(:user_id, :first_name, :last_name, :phone_number, :address) 

werden, obwohl es auch lang ist, ich weiß

+0

Vielen Dank, Ihre Methode ist so beeindruckend – BraveVN

+0

Mein Vergnügen Sir :) Wie auch immer, ich muss sagen, ich weiß nicht, ob es einen besseren Weg gibt. Es könnte sein. – Ursus

+0

Es ist die beste Methode in diesem Fall :) – BraveVN

1

Sie auch eine OpenStruct, wie so verwenden könnte:

o=OpenStruct.new(user_info) 

Dann können Sie Zugang Variablen wie folgt:

o.user_id 

etc