我的应用程序在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"
单击按钮不会执行任何操作,并且我的编辑框将保持空白。任何帮助表示赞赏!
答案 0 :(得分:1)
鞋子不是这样工作的。 Shoes is not Ruby,它看起来只有Ruby。您知道在Ruby中工作的许多事情根本无法在Shoes中工作,因为Shoes是用C编写的工具包,可以通过直接调用Ruby API以Ruby式的方式工作。
require
呼叫是无法按您期望的方式进行的事情之一。关于其中一些规则available on the Shoes website,有一个令人困惑的解释。
我个人认为,鞋子实在令人沮丧,而且文献记录不多,即使以极其有限的方式使用它也不值得使用。祝你好运。
更新
您在下面询问了“方法”。我想你的意思是,如何在Shoes应用中正确使用require
从单独的文件中加载代码。
以this repo为例。您可以先构建a normal Ruby class,然后在您的应用中require
构建该类。您可以通过常规的Ruby方法在Shoes.app do
块中使用该类。但是(据我所知),由于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
在这里,我创建了一个带有类变量的模块,因为在没有实例化的东西中使用实例变量是没有意义的。
当然还有其他方法可以执行此操作,并且您可能会找到other examples on GitHub(尽管您可能需要调整该查询以获取更多结果),但这是一个功能性的示例,可以完成您的任务已经概述了。