2015-06-01 3 views
1

Я хочу сделать что-то вроде:Динамически создать Рубиновые переменные с интерполяции строк

4.times do |n| 
    "member#{n}" = Fabricate(:user) 
end 

Calling member1, member2 и т.д .. дали бы мне пользовательские экземпляры. Является ли #send или #eval полезным для моей ситуации? Спасибо, что посмотрели.

ответ

2

Вы не можете динамически установить local variables таким образом, потому что то, что вы на самом деле пытаетесь сделать, это установить String. Ваш код интерпретируется следующим образом

"member1" = Fabricate(:user) 

Который поднимет SyntaxError для неожиданного =, потому что вы не можете установить String ни к чему.

Однако вы можете выполнить эту операцию с instance_variables следующим образом:

4.times do |n| 
    instance_variable_set("@member#{n}", Fabricate(:user)) 
end 

Затем к ним доступ с @member1, @member2 и т.д.

Для того, чтобы ответить на ваш второй вопрос не send и eval не имеют особого использования в этом случае

Смежные вопросы