我的应用程序在Shoes 3上运行,由以下代码组成
require 'somefile'
Shoes.app do
stack do
flow do
@my_editbox = edit_line
end
flow do
button "Get Name" do
@my_editbox.text = "#{@name}"
end
end
end
end
用我的外部文件somefile.rb保存
@name = "my name"
单击该按钮什么也不做,我的编辑框保持为空。感谢您的帮助!
鞋子不是这样工作的。鞋子不是鲁比,它只是看起来像鲁比。您知道在Ruby中工作的许多东西在Shoes中根本不起作用,因为Shoes是一个用C编写的工具包,它将通过直接调用Ruby API以Ruby风格工作。
require
调用是无法按预期方式工作的事情之一。Shoes网站上有一个关于这些规则的解释,非常令人困惑。
就我个人而言,我发现鞋子太令人沮丧了,而且记录得很差,即使在使用方式极其有限的情况下,它也不值得使用。祝你好运
更新
你在下面询问了"如何"。我想你的意思是,如何在Shoes应用程序中正确使用require
从单独的文件加载代码。
以这个回购为例。你可以构建一个普通的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上找到其他例子(尽管你可能需要调整查询以获得更多结果(,但这是一个完成你概述的任务的功能性例子。