从另一个文件中获取鞋子编辑框的文本字符串
Fetch text string for Shoes edit box from another file
我的应用在 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"
点击按钮没有任何反应,我的编辑框仍然是空的。感谢您的帮助!
Shoes 不是这样运作的。 Shoes is not Ruby,只是看起来像Ruby。许多你知道可以在 Ruby 中工作的东西在 Shoes 中根本不起作用,因为 Shoes 是一个用 C 编写的工具包,可以通过直接调用 Ruby API 以 Ruby-ish 方式工作.
require
调用是无法按您预期的方式工作的事情之一。关于其中一些规则的解释令人困惑available on the Shoes website。
就我个人而言,我发现 Shoes 非常令人沮丧,而且文档很少,即使以极其有限的方式使用它也不值得使用。祝你好运。
更新
您在下方询问了 "how"。我假设您的意思是,如何在 Shoes 应用程序中正确使用 require
从单独的文件加载代码。
看看 this repo for an example. You can build a normal Ruby class,然后 require
那 class 在你的应用程序中。您可以在 Shoes.app do
块中以正常的 Ruby 方式使用 class。但是(据我所知)由于 self
在块内的变化方式,您无法引入存在于 class/module.
之外的独立实例变量
不过,您可以这样做,而且它确实会按照您期望的方式工作:
# 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
我在这里创建了一个带有 class 变量的模块,因为在未实例化的对象中使用实例变量没有意义。
当然还有其他方法可以做到这一点,您可能会找到 other examples on GitHub(尽管您可能需要调整该查询以获得更多结果),但这是一个功能示例来完成您概述的任务。
我的应用在 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"
点击按钮没有任何反应,我的编辑框仍然是空的。感谢您的帮助!
Shoes 不是这样运作的。 Shoes is not Ruby,只是看起来像Ruby。许多你知道可以在 Ruby 中工作的东西在 Shoes 中根本不起作用,因为 Shoes 是一个用 C 编写的工具包,可以通过直接调用 Ruby API 以 Ruby-ish 方式工作.
require
调用是无法按您预期的方式工作的事情之一。关于其中一些规则的解释令人困惑available on the Shoes website。
就我个人而言,我发现 Shoes 非常令人沮丧,而且文档很少,即使以极其有限的方式使用它也不值得使用。祝你好运。
更新
您在下方询问了 "how"。我假设您的意思是,如何在 Shoes 应用程序中正确使用 require
从单独的文件加载代码。
看看 this repo for an example. You can build a normal Ruby class,然后 require
那 class 在你的应用程序中。您可以在 Shoes.app do
块中以正常的 Ruby 方式使用 class。但是(据我所知)由于 self
在块内的变化方式,您无法引入存在于 class/module.
不过,您可以这样做,而且它确实会按照您期望的方式工作:
# 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
我在这里创建了一个带有 class 变量的模块,因为在未实例化的对象中使用实例变量没有意义。
当然还有其他方法可以做到这一点,您可能会找到 other examples on GitHub(尽管您可能需要调整该查询以获得更多结果),但这是一个功能示例来完成您概述的任务。