首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby (Shoes) -等待函数返回值

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

Stack Overflow用户
提问于 2008-12-19 16:40:50
回答 1查看 3K关注 0票数 2

我有一个函数为用户呈现一个组合框。

代码语言:javascript
复制
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等待来自组合框的输入,然后执行其余的代码。

鞋子中有一个类似的函数,称为,它将等待用户的输入。

代码语言:javascript
复制
interface =  ask("write your interface here")

我如何在Ruby/shoes中实现这个“等待变量有值”函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-12-21 21:21:38

我花了一段时间才理解你的问题:)我开始写一个关于GUI应用程序的整个理论的长篇答案。但你已经拥有了你所需要的一切。所使用的块实际上是它的更改方法。你在告诉它换衣服的时候该怎么做。当您获得所需的值时,只需将程序的其余部分推迟运行即可。

代码语言:javascript
复制
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应用程序背后的基本思想:构建初始应用程序,然后等待"events",这将为您响应创建新的状态。例如,在rubygnome2中,您将使用一个回调函数/块和一个Gtk::组合框来更改应用程序的状态。就像这样:

代码语言:javascript
复制
# 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的观测器模块获得“免费”事件系统。希望这能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/381480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档