2017-09-02 34 views
0

是由GTK關閉動作調用的代碼 - 這導致該輸出>ruby​​中的block_singleton_method是什麼?爲什麼會出現這個錯誤而退出下面

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

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>' 

該程序工作正常..它不會爲我創造一個混亂..但我想知道這些錯誤的原因,以便我可以處理它。

回答

1

Kernel#exit拋出一個異常終止程序,看起來像要你問有關異常的消息:

通過提高SystemExit例外啓動Ruby腳本的終止。這個例外可能被捕獲。

至於堆棧跟蹤的"block in define_singleton_method"部分,而紅寶石有define_singleton_method,如果你看看指定文件的行110,你會發現你是在方法也被稱爲define_singleton_method和你在方法塊內部:

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,tho呃,他們可能只是記錄/輸出並重新提高它(這在某些答案中是可以的),這只是猜測而沒有深入挖掘代碼(它甚至可能不在這個寶石中)