在文档中,它说:
fetch(key [,default])→obj; fetch(key){|关键|阻止}→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
你能帮我解释一下吗?
答案 0 :(得分:5)
好像你正在使用旧版本的Ruby。根据{{3}},它会引发IndexError
:
从给定键的哈希值返回一个值。如果钥匙不能 发现,有几种选择:没有其他参数,它会 引发 IndexError 异常;如果给出了默认值,那么就是 回;如果指定了可选代码块,那么就是 运行并返回其结果。
请注意1.8.7 docs是Ruby 1.9+中KeyError
的子类,因此抢救IndexError
也有效。
答案 1 :(得分: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"