gpt4 book ai didi

Ruby (Shoes) - 等待函数返回值

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:25 25 4
gpt4 key购买 nike

我有一个向用户显示组合框的功能。

def select_interface(interfaces)
list_box :items => interfaces do |list|
interface = list.text
end
### ideally should wait until interface has a value then: ###
return interface
end

程序的其余部分取决于此组合框中的选择。

我想找到一种方法让 ruby​​ 等待来自组合框的输入,然后继续执行其余代码。

shoes中也有类似的功能称为 ask 等待用户输入。

interface =  ask("write your interface here")

如何在 Ruby/shoes 中实现“等待变量有值”功能?

最佳答案

我花了一段时间才理解你的问题:) 我开始写一篇关于 GUI 应用程序整个理论的长篇回答。但是您已经拥有了所需的一切。 list_box 的 block takes 确实是它的改变方法。你告诉它当它被改变时该怎么做。当您获得所需的值时,只需推迟程序的其余部分运行即可。

Shoes.app do 
interfaces = ["blah", "blah1", "blah2"]
# proc is also called lambda
@run_rest_of_application = proc do
if @interface == "blah"
do_blah
# etc
end

@list_box = list_box(:items => interfaces) do |list|
@interface = list.text
@run_rest_of_application.call
@list_box.hide # Maybe you only wanted this one time?
end
end

这是所有 GUI 应用程序背后的基本思想:构建初始应用程序,然后等待“事件”,这将创建新的状态供您响应。例如,在 ruby​​-gnome2 中,您可以使用带有 Gtk::ComboBox 的回调函数/ block 。那会改变你的应用程序的状态。像这样:

# Let's say you're in a method in a class
@interface = nil
@combobox.signal_connect("changed") do |widget|
@interface = widget.selection.selected
rebuild_using_interface
end

即使在工具包之外,您也可以获得使用 Ruby 的 Observer module 的“免费”事件系统。 .希望这对您有所帮助。

关于Ruby (Shoes) - 等待函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/381480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com