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



我想做一些类似的事情:

lookup_value = :f
dict = {a: 20, b: 30, c: 40}
res = dict[lookup_value] | raise 'not found'

如上例所示,如果在字典中找不到键,我想引发错误。我可以只加一行说raise 'not found' unless res,但我真的很想在表达式中使用查找:

output = 'prefix' + (dict[lookup_value] | raise 'not found')

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

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

res = (raise 'not found' unless dict[lookup_value])

dict.fetch(lookup_value)就像dict[lookup_value],但如果缺少键,则会引发。

你也可以做一些调整,大致在问题中做一些事情:dict[lookup_value] || raise('not found')- 这让你控制异常。

这应该在找到值时修复 nil 返回。

更改此设置:

res = (raise 'not found' unless dict[lookup_value])

进入这个:

raise 'not found' unless res = dict[lookup_value]

除了@matthewd之外,您还可以通过以下方式使用fetch控制raise

dict.fetch(lookup_value) { raise 'not found' }

最新更新