2012-01-04 5 views
2

Мне интересно, есть ли элегантный способ создания переменных с использованием цикла в ruby?Создание нескольких переменных с помощью цикла?

Скажем, я хочу, чтобы поместить это в какой-то петли

def workhours 
    @monday = blah 
    @tuesday = brah 
    @wednesday = bro 
    @thursday = blap 
    @friday = blagh 
end 

То, что я хочу быть в состоянии сделать

def workhour_ideally 
    days = [ "monday", "tuesday", "wednesday", "thursday", "friday" ] 

    days.each do |smack| 
    @"smack" = whatever 
    end 
end 

Возможно ли это с рубином?

+1

Связанный вопрос: http://stackoverflow.com/questions/1778638/idiomatic-object-creation-in-ruby –

ответ

5

Да, это возможно с Rails. Нет, вы не должны этого делать. Если бы я должен был догадаться, я бы сказал, что это какой-то PHPism.

Что лучше использовать Hash:

@days = { 
    :monday => blah, 
    :tuesday => brah, 
    # ... 
    :friday => blagh 
} 

Затем вы можете итерацию над ними, как вы хотите. Ссылка на один из них лишь немного больше печатает: @days[:monday] вместо @monday.

Использование правильной структуры данных позволяет вам манипулировать ею, перебирать ее и предлагать всевозможные возможности для ее тщательного тестирования.

+1

Спасибо. Похоже, у меня есть код для очистки. –

2

Да, это возможно. Я думаю, что это называется instance_variable_set, и было бы безопаснее делать это, чем использовать зло eval.

Но вместо этого используйте хеш, если это необходимо.

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