首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ruby中block_singleton_method是什么?为什么在退出时会出现此错误

在ruby中block_singleton_method是什么?为什么在退出时会出现此错误
EN

Stack Overflow用户
提问于 2017-09-03 01:54:47
回答 1查看 50关注 0票数 0

下面是gtk关闭操作调用的代码-->

代码语言:javascript
复制
def on_main_window_destroy(object)
  begin
  $client.send(':exit')
  Thread.kill $client.response
  rescue
    puts 'exiting'
  end
  Thread.kill $receiving_message
  Gtk.main_quit()
  exit
end

这将导致此输出。

代码语言:javascript
复制
app.rb:81:in `exit': exit
 from app.rb:81:in `on_main_window_destroy'
 from /home/user/.gem/ruby/2.4.0/gems/gobject-introspection-3.1.8/lib/gobject-introspection/loader.rb:110:in `invoke'
 from /home/user/.gem/ruby/2.4.0/gems/gobject-introspection-3.1.8/lib/gobject-introspection/loader.rb:110:in `block in define_singleton_method'
 from app.rb:97:in `<main>'

这个程序运行良好..它不会对我造成混乱..但我想知道这些错误的原因,这样我就可以处理它。

EN

回答 1

Stack Overflow用户

发布于 2017-09-03 02:36:47

Kernel#exit会抛出一个异常来终止程序,这看起来就是您所询问的异常消息:

Ruby通过引发SystemExit异常来启动

脚本的终止。此异常可能会被捕获。

至于堆栈跟踪的"block in define_singleton_method"部分,虽然ruby有一个define_singleton_method,但如果你查看指定文件的第110行,你会发现你所在的方法也被称为define_singleton_method,并且你在该方法中的一个块中:

代码语言:javascript
复制
def define_singleton_method(klass, name, info)
  # ... 
  singleton_class.__send__(:define_method, name) do |*arguments, &block|
    arguments, block = prepare.call(arguments, &block) # <<< Line 110
    # ...
  end
end

我不确定为什么你实际上看到了输出,而不是像平常那样静静地退出,一种可能是在代码中的某个地方,某些东西只是拯救了基本的Exception,而不是StandardError,它是generally a bad idea,尽管它们可能只是记录/输出并重新引发它(正如在一些答案中看到的,这是好的),这一切都只是猜测,没有深入研究代码(它甚至可能不在这个gem中)。

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

https://stackoverflow.com/questions/46016622

复制
相关文章

相似问题

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