Hash.fetch(not_exist_key)引发IndexError而不是KeyError

Hie*_*yen 2 ruby exception doc

在文档中,它说:

fetch(key [,default])→obj; fetch(key){| 关键| block}→obj

返回给定键的哈希值.如果找不到密钥,则有几个选项:如果没有其他参数,则会引发KeyError异常; 如果给出了默认值,那么将返回; 如果指定了可选代码块,那么将运行该代码块并返回其结果.

在我的航站楼,irb说:

irb(main):001:0> hash = { 1 => "No one", 2 => "gonna", 3 => "fetch me" }
=> {1=>"No one", 2=>"gonna", 3=>"fetch me"}

irb(main):002:0> hash.fetch(4)
IndexError: key not found
    from (irb):2:in `fetch'
    from (irb):2
    from :0
Run Code Online (Sandbox Code Playgroud)

你能帮我解释一下吗?

Ste*_*fan 5

好像你使用的是旧版本的Ruby.根据1.8.7文档,它提出了一个IndexError:

返回给定键的哈希值.如果找不到密钥,则有几个选项:如果没有其他参数,则会引发IndexError异常; 如果给出了默认值,那么将返回; 如果指定了可选代码块,那么将运行该代码块并返回其结果.

请注意,它KeyErrorIndexErrorRuby 1.9+ 的子类,因此救援IndexError工作也是如此.