2013-08-04 56 views
0

我有一些客戶端代碼,在本例中爲MyModule,它在子模塊Exception中定義了一些自定義的異常。在MyModule有一個rescue塊,其中引用Exception。問題是,當ruby需要成爲核心ruby的基類Exception類時,它將名字Exception解析爲MyModule::Exception(一個模塊)。這裏有一個代碼圖示來說明我的意思:如何指定異常,當它似乎沒有模塊?

puts Exception 
puts Exception.class 

module MyModule 
    module Exception 
     class CustomError < StandardError 
     end 
    end 
end 

module MyModule 
    puts Exception 
    puts Exception.class 
end 

輸出的結果是:

Exception 
Class 
MyModule::Exception 
Module 

我怎樣才能迫使第二Exception參考解析爲核心紅寶石Exception類時沒有模塊區分它?我已經嘗試過Kernel :: Exception,並且調查是否有方法讓模塊進入,但似乎只有#name,它產生了類的完全限定名。

回答

1

如果有疑問,您需要爲類指定完全限定名稱(FQN)。你的異常有這個FQN:

MyModule::Exception 

但是從核心的例外是頂級(未嵌套在任何東西),所以它的FQN只是

::Exception 

是的,你可能不想營救核心Exception。這是不好的做法,因爲這個處理程序會捕獲比你能處理的東西更多的東西(信號,加載錯誤等)。

+0

我會去用這個,因爲防止雨傘捕捉的樣板警告是不可避免的值得。在這種情況下,它是我客戶的代碼,所以我不完全掌握它的寫法。我同意更具體的異常處理將是最好的。 –

0

想通了。在百靈,我試過::Exception,這使得一種奇怪的感覺。