我想做一些类似的事情:
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' }