Это не так, как работает обувь. Shoes - это не Ruby , он выглядит только как Ruby.Многие вещи, которые вы знаете, чтобы работать в Ruby, просто не будут работать в Shoes, потому что Shoes - это инструментарий, написанный на C, который будет работать на Ruby-ish, напрямую вызывая API-интерфейсы Ruby.
require
вызовыодна из вещей, которая не будет работать так, как вы ожидаете.Есть довольно запутанное объяснение некоторых из этих правил , доступных на веб-сайте Shoes .
Лично я обнаружил, что обувь настолько расстраивает и плохо документирует, что ее не стоит использовать даже вкрайне ограниченные способы его использования.Удачи.
Обновление
Вы спросили ниже о "как".Я предполагаю, что вы имеете в виду, как правильно использовать require
в приложении Shoes для загрузки кода из отдельного файла.
Взгляните на в этом репо для примера.Вы можете создать обычный класс Ruby и затем require
этот класс в своем приложении.Вы можете использовать этот класс в своем блоке Shoes.app do
обычным способом Ruby.Но (насколько я могу судить) из-за того, как self
изменяется внутри блока, вы не можете извлечь автономную переменную экземпляра, которая существует вне класса / модуля.
Вы можете сделать что-то подобноеТем не менее, и он работает так, как вы ожидаете:
# foo.rb
module Foo
@@name = 'foobar'
end
и
# test.rb
require './foo.rb'
Shoes.app do
stack do
flow do
@my_editbox = edit_line
end
flow do
button "Get Name" do
@my_editbox.text = Foo.class_variable_get(:@@name)
end
end
end
end
Здесь я создал модуль с переменной класса, потому что это не имеет смыслаиспользовать переменную экземпляра в том, что не было создано.
Конечно, есть и другие способы сделать это, и вы, вероятно, можете найти других примеров на GitHub (хотя вы можетенужно настроить этот запрос, чтобы получить больше результатов), но это функциональный пример для выполнения поставленной задачи.