2

在文档中,它说:

fetch(key [, default] ) → 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

你能帮我解释一下吗?

4

2 回答 2

6

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

从给定键的哈希中返回一个值。如果找不到键,有几种选择: 没有其他参数,它将引发IndexError异常;如果给定默认值,则将返回该值;如果指定了可选代码块,则将运行该代码块并返回其结果。

请注意,这KeyErrorIndexErrorRuby 1.9+ 中的子类,因此救援IndexError也可以。

于 2013-07-21T15:09:44.240 回答
1

我正在使用 ruby​​ 1.9.3p0 并且没有问题:

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) 

KeyError: key not found: 4
    from (irb):2:in `fetch'
    from (irb):2
    from /home/marek/.rbenv/versions/1.9.3-p0/bin/irb:12:in `<main>'

irb(main):003:0> hash.fetch(1) 
=> "No one"
于 2013-07-21T15:12:48.840 回答