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

时间:2018-05-23 06:45:17

标签: ruby

我想按照以下方式做点什么:

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

3 个答案:

答案 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]