代码之家  ›  专栏  ›  技术社区  ›  mydoghasworms

如果Ruby中的计算返回nil,我如何引发异常?

  •  0
  • mydoghasworms  · 技术社区  · 6 年前

    我想做些事情:

    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])
    
    3 回复  |  直到 6 年前
        1
  •  3
  •   matthewd    6 年前

    dict.fetch(lookup_value) 就像 dict[lookup_value] ,但如果缺少密钥,则将提升。

    您还可以通过以下几点调整来大致了解问题所在: dict[lookup_value] || raise('not found') --这使您能够控制异常。

        2
  •  1
  •   Oleksandr Holubenko    6 年前

    除了@matthewd,您还可以控制 raise 具有 fetch 这样:

    dict.fetch(lookup_value) { raise 'not found' }
    
        3
  •  0
  •   iGian    6 年前

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

    更改此:

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

    在这方面:

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