2015-05-23 4 views
1

Я новичок в рубине. Есть ли способ сократить этот код («increment var #»)? Я создал 26 записей для алфавита.Приращение переменной для Ruby

require 'tk' 
dis = { 'padx' =>5, 'pady' =>5} 
root = TkRoot.new {title "Alphabet"} 
elpar = {'height' => 25, 'width' => 25} 
f1 = TkFrame.new{ 
    relief 'sunken' 
    borderwidth 1 
    background "black" 
    height 800 
    width 800 
    dis 
    pack 
    } 
f1.place('x' => 0, 'y' => 0) 

el00 = TkEntry.new(f1) 
el01 = TkEntry.new(f1) 
el02 = TkEntry.new(f1) 
      to    # Can I use loop here to shorten it? 
el26 = TkEntry.new(f1) 


var1 = TkVariable.new 
      to   #(1) 
var2 = TkVariable.new 


el00.textvariable = var1 
var1.value = "A" 
el00.place(elpar) 
el00.place('x' => 0, 'y' => 0) 
      to    # 
el26.textvariable = var26 
var26.value = "Z" 
el26.place(elpar) 
el26.place('x' => 728, 'y' => 0) 

Tk.mainloop 

(1) Я попытался с помощью петли здесь

x = 1 
    while x < 27 
    "var#{x}"=TkVariable.new   # var1 is still undefined local variable if I use a loop. 
    "var" + x.to_s=TkVariable.new # another variation that i've tried 
    x += 1 
    end 

Есть ли способ, чтобы сократить его? Мои коды - всего лишь 1 шаг?

Спасибо, Jim

+0

Возможный дубликат: http://stackoverflow.com/questions/16419767/ruby-dynamic-variable-name –

ответ

1

Вы можете просто хранить записи в массиве:

entries = Array.new(26) { TkEntry.new(f1) } 

Тогда читать ваши записи:

entries[0] #=> first entry 
entries[1] #=> second entry 

Используйте диапазон символов от А до Я в установить аргументы:

('A'..'Z').each_with_index do |character, index| 
    variable = TkVariable.new 
    variable.value = character 
    entries[index].textvariable = variable 
    entries[index].place(elpar) 
    entries[index].place('x' => 0, 'y' => 0) # you did not explain how to calculate this 
end 
+0

Привет, spickermann, – Jim

+0

Привет, spickermann, Большое вам спасибо за ваш немедленный ответ ..: D коды, которые вы мне дали , спаси меня много строк. Записи [index] .place ('x' => 0, 'y' => 0) - это приращение 27 в его горизонтальной плоскости. Кстати, когда я попытался изменить («A» .. «Z») на целое число, это не сработало? Я расскажу об этом «каждом» итераторе. Еще раз спасибо, Джим – Jim

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