2013-06-15 1 views
1

top, top_middle, bottom_middle и bottom - четыре длинные строки.ruby ​​- как получить строковые имена объектов внутри цикла?

Как я могу сушить следующее, учитывая, что строковые значения current совпадают с именем переменной, используемой the_line, но не ее фактической переменной.

Есть ли какое-то «переменное. Переменное имя» для чего это?

[top,top_middle,bottom_middle,bottom].each_with_index do |the_line, i| 
    current= 
    case i 
     when 0 then "top" 
     when 1 then "top_middle" 
     when 2 then "bottom_middle" 
     when 3 then "bottom" 
    end 
    puts current 
    puts the_line 
end 

Выход нормально как:

top 
――  | ―― ―― | | ―― |  ―― ―― ―― 
top_middle 
| |  | __| __| |__| |__ |__  | |__| |__| 
bottom_middle 
| |  | |  |  |  | | |  | | |  | 
bottom 
――  | ―― ――  | ―― ――  | ――  | 
+0

возможно дубликат [рубин - Получить имя переменной] (http://stackoverflow.com/questions/58482/ruby-get-a-variables-name) – nemesv

ответ

3

Вместо того, чтобы каждый из этих связанных вещей, как отдельные переменные, я бы поставил четыре из них вместе в Hash:

lines = { 
    :top   => ' ――  | ―― ―― | | ―― |  ―― ―― ―― ', 
    :top_middle => '| |  | __| __| |__| |__ |__  | |__| |__|', 
    :bottom_middle => '| |  | |  |  |  | | |  | | |  |', 
    :bottom  => ' ――  | ―― ――  | ―― ――  | ――  |' 
} 

Это очищает вещи красиво:

lines.each do |current, the_line| 
    puts current 
    puts the_line 
end 

Это дает:

 
top 
――  | ―― ―― | | ―― |  ―― ―― ―― 
top_middle 
| |  | __| __| |__| |__ |__  | |__| |__| 
bottom_middle 
| |  | |  |  |  | | |  | | |  | 
bottom 
――  | ―― ――  | ―― ――  | ――  | 

(Если вам действительно нужно current в виде строки, вы можете вызвать to_s на него, но оставить его как символ хорошо в этом случае.)

+1

* Точно * код, который я просто хотел опубликовать :) – Stefan