Ruby 中的执行流程

Execution Flow in Ruby

我有以下要求:

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

我实现了以下功能:

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

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

如果类型是 'Kasaya',应该 return 'Dharmaguptaka's Kasaya Robe' 无方法错误 #RSpec::Core::ExampleGroup::Nested_157:0x000000029b1598

的未定义方法“KasayaError”

我的问题是为什么密码坏了?

在我看来,如果参数是 Kasaya,return 语句将被执行到 return 函数的结果。我说得对吗?

if the parameter is not Kasaya, the return statement will be executed to return the result of the function. Am I correct?

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

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

执行流到达您 return 语句的唯一途径是 if type "Kasaya"。那么条件 type != "Kasaya" 为假,并且永远不会达到 raise