在Ruby中捕获错误

时间:2011-01-12 08:15:05

标签: ruby exception-handling

我的陈述看起来像这样

if not @user.verified? or @user.credit_card.expired?
  # do stuff
end

问题是@user还没有信用卡,因为expired?会因为零值而引发异常。

是否有一种简洁的方法可以在不必使用额外的if语句的情况下捕获内联错误?

3 个答案:

答案 0 :(得分:1)

要避免此异常,您可以使用Rails 2.3 / 3内置方法:try

if not @user.verified? or @user.credit_card.try(:expired?)
  # do stuff
end

答案 1 :(得分:0)

当且仅当对象不为null时, gem才允许进行受保护的方法调用。

您的代码段如下所示:

if not @user.verified? or @user.credit_card.andand.expired?
  # do stuff
end

您可以使用gem install andand进行安装,然后就可以了。

网站:http://andand.rubyforge.org/

答案 2 :(得分:0)

代码

@user.credit_card.expired?

将被称为违反Law of Demeter。该法律规定,您可以在@user上调用您喜欢的任何方法,但不能在@user.credit_card上调用。