ruby - обувь - вызов функции edit_line

У меня есть этот код:

Shoes.app do

  data = [1,2,3,4] # could be also more

  data.each { |i|
    edit_line ("foo"){ puts i}
  }

end

когда значение (foo) изменяется в поле edit_line, я вижу в терминале 1,2,3 или 4. Но мне нужно значение (.txt) из каждого поля edit_line. Как я могу ссылаться на него? Проблема в том, что данные являются динамическими и могут иметь n записей.

В php есть что-то вроде $$var, а в рубине что-то есть? может быть, это может помочь.


person Community    schedule 11.06.2009    source источник
comment
Ответ Песто работает, так почему бы вам не принять этот ответ, чтобы этот вопрос можно было закрыть?   -  person peter    schedule 14.07.2014


Ответы (3)


Если вы просто хотите видеть данные при изменении строки edit_line, вы можете использовать метод change и метод text:

Shoes.app do

  data = [1,2,3,4] # could be also more

  data.each do |i|
    edit_line('foo').change do |e| { puts "#Edit Line #{i} Changed: #{e.text}" }
  end
end

Поскольку блок по умолчанию для метода edit_line делает то же самое, вы можете упростить это до:

Shoes.app do

  data = [1,2,3,4] # could be also more

  data.each do |i|
    edit_line 'foo' do |e| { puts "#Edit Line #{i} Changed: #{e.text}" }
  end
end

Также обратите внимание, что использование do/end вместо {} для многострочных блоков является предпочтительным стилем.

person Pesto    schedule 12.06.2009

Поскольку вам нужны и индекс, и данные, хранящиеся там, вам нужен #each_with_index. Я никогда не пользовался обувью, поэтому не могу помочь с этой частью, но #each_with_index работает так:

data = ["cat", "bat", "rat"]
data.each_with_index {|i, d| print "#{i} => #{d} "}

Это напечатает: 0 => кошка 1 => летучая мышь 2 => крыса

person David Seiler    schedule 12.06.2009

Друг указал мне на это:

data.each_index { |i| data[i] = edit_line() { data[i].text } }
person Community    schedule 11.06.2009