我想按照以下方式做点什么:
glob(3)
如上例所示,如果在字典中找不到密钥,我想引发错误。我可以只有一行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')
是无效的语法。如果查询散列中的值失败而不必声明其他变量或事先进行检查,我正在寻找一种可以在表达式中引发错误的方法。
以下是有效的语法,如果找不到值,则抛出异常,但在找到值时返回nil:
raise
答案 0 :(得分:3)
dict.fetch(lookup_value)
与dict[lookup_value]
类似,但如果密钥丢失则会提升。
您还可以通过一些调整来完成问题中的大致工作:dict[lookup_value] || raise('not found')
- 可以控制异常。
答案 1 :(得分:1)
除了@matthewd之外,您还可以通过以下方式控制raise
fetch
:
dict.fetch(lookup_value) { raise 'not found' }
答案 2 :(得分:0)
这应该在找到值时修复nil返回。
更改此内容:
res = (raise 'not found' unless dict[lookup_value])
进入这个:
raise 'not found' unless res = dict[lookup_value]