如果在红宝石中有条件,那么“拯救虚假”意味着什么

时间:2017-11-20 21:39:53

标签: ruby error-handling rescue

我是红宝石新手,有一个问题。

if (new_account.save rescue false)
   # when account save success
else
   # when account save has error
end

我不确定此代码中的抢救措施是什么意思。 感谢

1 个答案:

答案 0 :(得分:2)

单线拯救是语法糖

foo.bar rescue false
# same as
begin
  foo.bar
rescue
  false
end

所以你的代码和这个

几乎相同
result = nil
begin
  result = new_account.save
rescue
  result = false
end

if result
  # when account save success
else
  # when account save has error
end

rescue false表示new_account.save内引发的异常与返回false时的异常相同。在我看来,这是糟糕的设计new_account显然设计为有两种不同的失败案例,但调用代码忽略它。此代码极有可能隐藏保存方法中发生的实际错误。