asy*_*ric 5 module ruby-on-rails exception
我已经创建了一个自定义模块(目前只定义了一个新的Exception类),并将其放在下面 lib/lib_th.rb
module LibTH
module Error
IDNotFound = Class.new
end
end
Run Code Online (Sandbox Code Playgroud)
我不需要在我的代码中要求/包含模块,因为它应该自动加载,因为它遵循传统的命名规则.
但是当我尝试IDNotFound
在我的代码中的某个地方引发异常时:
res.size == 0 ? raise LibTH::Error::IDNotFound : res
Run Code Online (Sandbox Code Playgroud)
我得到了以下错误:
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'
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我在尝试引发异常时没有遇到任何问题script/console
:
>> raise LibTH::Error::IDNotFound
LibTH::Error::IDNotFound: LibTH::Error::IDNotFound
from (irb):70
Run Code Online (Sandbox Code Playgroud)
谢谢!
没关系,我自己解决了这个问题:
我没有使用该if ? then : else
语句,而是将其扩展为:
raise LibTH::Error::IDNotFound if res.size == 0
res
Run Code Online (Sandbox Code Playgroud)
看来你不能在类似 C 的if
语句中使用常量值(作为类名),因此:
syntax error, unexpected tCONSTANT, expecting kDO or '{' or '('
Run Code Online (Sandbox Code Playgroud)
谢谢阿西!
归档时间: |
|
查看次数: |
2665 次 |
最近记录: |