如果评估在 Ruby 中返回 nil,我如何引发异常?

myd*_*rms 3 ruby

我想做一些类似的事情:

lookup_value = :f
dict = {a: 20, b: 30, c: 40}
res = dict[lookup_value] | raise 'not found'
Run Code Online (Sandbox Code Playgroud)

如上面的例子,如果在字典中找不到键,我想引发一个错误。我可以有一个额外的行,上面写着raise 'not found' unless res,但我真的想在表达式中使用查找:

output = 'prefix' + (dict[lookup_value] | raise 'not found')
Run Code Online (Sandbox Code Playgroud)

问题在于raise以这种方式使用不是有效的语法。我正在寻找一种方法,如果哈希中的值查找失败,我可以在表达式中引发错误,而无需声明其他变量或事先进行检查。

以下是有效的语法,如果未找到值将抛出异常,但在找到值时返回 nil:

res = (raise 'not found' unless dict[lookup_value])
Run Code Online (Sandbox Code Playgroud)

mat*_*ewd 5

dict.fetch(lookup_value)就像dict[lookup_value],但如果密钥丢失,则会引发。

您还可以通过一些调整来大致完成您在问题中的操作:dict[lookup_value] || raise('not found')-- 这使您可以控制异常。