我有一个看起来像这样捕获错误在Ruby中
if not @user.verified? or @user.credit_card.expired?
# do stuff
end
问题出在哪里了@user
还没有信用卡,因为expired?
将提高,因为零值的异常的情况说明。
有没有一种简洁的方式来捕捉错误内联,而不必诉诸额外的if语句?
我有一个看起来像这样捕获错误在Ruby中
if not @user.verified? or @user.credit_card.expired?
# do stuff
end
问题出在哪里了@user
还没有信用卡,因为expired?
将提高,因为零值的异常的情况说明。
有没有一种简洁的方式来捕捉错误内联,而不必诉诸额外的if语句?
为了避免这种例外,您可以使用Rails的2.3/3内置的方法:try
if not @user.verified? or @user.credit_card.try(:expired?)
# do stuff
end
andand当且仅当对象不为空时,gem允许保护方法调用。
您的代码段是这样的:
if not @user.verified? or @user.credit_card.andand.expired?
# do stuff
end
你可以用gem install andand
安装它,你是好去。
代码
@user.credit_card.expired?
将被称为违反Law of Demeter。该法律规定您可以在@user
上拨打任何您喜欢的方式,但不能拨打@user.credit_card
。
首先检查空吗?即ie if user.credit_card.exists? – zengr 2011-01-12 08:19:28