2009-07-07 36 views
5

我創建了一個自定義模塊(目前只定義了一個新的異常類),並把它下lib/lib_th.rb定義自定義異常的一個模塊中的Rails

module LibTH 
    module Error 
     IDNotFound = Class.new 
    end 
end 

我不應該需要導入/包括模塊在我的代碼中,因爲它應該自動加載,因爲它遵循傳統的命名規則。

但是,當我嘗試在我的代碼某處提高IDNotFound例外:

res.size == 0 ? raise LibTH::Error::IDNotFound : res 

我得到follwoing錯誤:

SyntaxError (/Users/lrnz/code/ruby/corinna/app/models/treasure_hunt.rb:49: syntax error, unexpected tCONSTANT, expecting kDO or '{' or '(' 
    res.size == 0 ? raise LibTH::Error::IDNotFound : res 
          ^
/Users/lrnz/code/ruby/corinna/app/models/treasure_hunt.rb:49: syntax error, unexpected ':' 
    res.size == 0 ? raise LibTH::Error::IDNotFound : res 
                ^): 
app/controllers/treasure_hunts_controller.rb:50:in `show' 

奇怪的是,我沒有遇到問題,努力提高script/console

>> raise LibTH::Error::IDNotFound 
LibTH::Error::IDNotFound: LibTH::Error::IDNotFound 
from (irb):70 

Tha NKS!

回答

2

沒關係,我自己解決了這個問題:

,而不是使用if ? then : else聲明,我擴大它變成:

raise LibTH::Error::IDNotFound if res.size == 0 
res 

看來你不能用一個恆定值(爲一類名稱)在C-like if聲明中,因此:

syntax error, unexpected tCONSTANT, expecting kDO or '{' or '(' 

非常感謝!

2

常量不是問題,你只是在加註時出現語法錯誤。如果將其更改爲:

res.size == 0 ? (raise LibTH::Error::IDNotFound) : res 

它會工作。不過,您糾正的表格更好。