2014-10-04 2 views
1

Я пытаюсь установить значение переменной, имя которой задано как строка. Каков наилучший способ сделать это? Первый способ я подумал о том, чтобы делать, если условия, такие как:Установить переменную класса на основе строки

if attribute_string = 'code' 
    @code = val 
elsif attribute_string = 'weight' 
    @weight = val 
... 

Но это некрасиво, и кажется, что плохой стиль кодирования. Есть идеи?

+0

(1) Как переменная класса относится к вашему вопросу? (2) Ваше условие 'if' всегда верно и всегда будет выполнять первую часть. Вся обусловленность не имеет смысла. – sawa

+0

Сначала объясните вашу проблему в не-программировании, что поможет вам и нам понять проблему. –

ответ

2

Вы можете получить/установить переменный экземпляр от его имени с помощью Object#instance_variable_set:

attribute_name = "code" 
val = "value" 
instance_variable_set :"@#{attribute_name}", val 

# Retrieve value with instance_variable_get 
instance_variable_get :"@#{attribute_name}" # => "value" 
+1

Обратите внимание, что если переменная поступает от пользовательского ввода, это может быть использовано для изменения переменных экземпляра, отличных от тех, которые вы планируете использовать. По крайней мере, вам нужно было бы запустить свое имя атрибута через белый список. В качестве альтернативы рассмотрите возможность хранения данных в хеше, чтобы сохранить пространство имен. – DGM

1

Вы должны быть в состоянии использовать instance_variable_set установить переменный экземпляр, основываясь на шнурке. В следующем примере будет выводиться 5:

attribute_string = 'code' 
instance_variable_set("@#{attribute_string}", 5) 
puts @code 
Смежные вопросы