Ruby中的执行流程

时间:2015-01-22 05:01:39

标签: ruby-on-rails ruby rspec

我有以下要求:

如果参数类型不是字符串“Kasaya”,则在robe方法中引发自定义异常处理程序KasayaError。它应该返回“Dharmaguptaka的Kasaya Robe”否则

我已实现以下功能:

def robe(type)
  if type != 'Kasaya' 
    raise KasayaError("Invalid")
  end
  return "Dharmaguptaka's Kasaya Robe"
end

但是当我针对rspec运行时,我得到了以下结果:

如果类型是'Kasaya',

应该返回'Dharmaguptaka的Kasaya Robe' NoMethodError #RSpec :: Core :: ExampleGroup :: Nested_157:0x000000029b1598

的未定义方法`KasayaError'

我的问题是为什么代码破了?

在我看来,如果参数是Kasaya,将执行return语句以返回函数的结果。我是对的吗?

1 个答案:

答案 0 :(得分:2)

  

如果参数不是Kasaya,则将执行return语句以返回函数的结果。我是对的吗?

不,这与您的代码设计的目的相反。

如果参数不是"Kasaya",则会引发异常,并且永远不会达到return。这是异常的全部要点:它们允许方法尽早“返回”,展开调用堆栈,直到找到匹配的异常处理程序。

如果return type,则执行流程的唯一方法是"Kasaya"语句。然后条件type != "Kasaya"为false,永远不会达到raise