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
。
我有以下要求:
如果参数类型不是字符串 "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
。