Lui*_*sVM 71 ruby ruby-on-rails
什么是最佳做法?使用try或使用rescue?
user.try(:email)
Run Code Online (Sandbox Code Playgroud)
VS
user.email rescue nil
Run Code Online (Sandbox Code Playgroud)
post.try(:comments).try(:first).try(:author)
Run Code Online (Sandbox Code Playgroud)
VS
post.comments.first.author rescue nil
Run Code Online (Sandbox Code Playgroud)
使用其中任何一个有什么不同吗?
Jac*_*Chu 110
尝试和救援用于不同的目的.目的try是为了避免您不得不这样做:
if user && user.email
Run Code Online (Sandbox Code Playgroud)
或者父对象可能为nil的任何情况,这将导致NilClass上的NoMethodError.目的rescue是处理由方法调用抛出的异常.如果您希望调用异常user.email,则可以rescue nil防止异常冒泡.
一般来说,我会说避免使用,rescue nil除非你明确知道你正在拯救什么例外,因为你可能正在拯救一个不同的例外,你永远不会知道它,因为rescue nil会阻止你看到它.至少也许你可以记录它:
begin
...some code...
rescue => ex
logger.error ex.message
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53302 次 |
| 最近记录: |