回答
默认情况下,使用#[]
如果存在将获取的散列值,并返回nil,如果它不存在,*。
使用#fetch
为您提供了几个选项(参见#fetch的文档):
fetch(key_name)
:获取值,如果键存在,养KeyError
如果它不fetch(key_name, default_value)
:获得如果密钥存在,则返回default_value
,否则返回fetch(key_name) { |key| "default" }
:如果密钥存在,则获取该值,否则运行提供的块并返回值。
每一个应该使用的情况下需要,但#fetch
是非常丰富的功能,可以处理很多情况下,取决于它如何使用。出于这个原因,我倾向于使用#[]
来访问密钥。
*由于马克 - 安德烈·Lafortune说,访问键与#[]
将调用#default_proc
如果它存在,否则返回#default
,默认为nil
。有关更多信息,请参见the doc entry for ::new
。
fetch
默认情况下,如果找不到密钥会引发错误。您可以改为提供默认值。
h = {}
h.fetch(:foo) # no default value, raises error
# => # ~> -:3:in `fetch': key not found: :foo (KeyError)
h.fetch(:bar, 10) # default value, returns default value
# => 10
'h [:foo]'与'h.fetch(:foo,nil)'相同。 –
@LBg:它表现相同,是 –
@LBg:不,它不是。它与'begin h.fetch(:foo)相同;救援KeyError;如果h.default_proc然后h.default_proc。()else h.default end end'。 –
随着[]
,哈希的创建者控制了一个密钥不存在时发生的事情,fetch
你做。
- 1. 散列VS索引
- 2. Smarty fetch vs smarty display
- 3. 散列vs特定参数
- 4. git pull VS git fetch git rebase
- 5. git fetch vs. git fetch origin master对追踪分支有不同的影响
- 6. 使用其他散列构造散列
- 7. 使用HTTPS时散列用户密码
- 8. Codility性能差异:阵列VS散列
- 9. 使用散列时每个错误
- 10. 使用Typescript/whatwg-fetch/webpack时出错
- 11. 使用Paged Fetch时性能下降
- 12. 使用location.replace显示散列URL(散)
- 13. 散列RowKeys Vs的单调递增RowKeys
- 14. 图像直接比较vs散列
- 15. Redis中的排序集vs散列?
- 16. 散列索引vs倒排索引
- 17. Python pbkdf2_hmac vs JavaScript crypto.pbkdf2Sync不一致散列
- 18. 使用双散列(##)用C
- 19. mysql fetch assoc VS mysql取数组
- 20. md5().vs之间有什么不同。散列时保存密码?
- 21. “不能使用字符串作为散列引用”散列散列的散列值
- 22. 散列时间戳
- 23. 何时散列passwrd?
- 24. 何时使用分布式散列表而不是“传统”散列表?
- 25. 使用js fetch禁用CORS
- 26. 使用散列函数登录错误
- 27. 使用散列键和值
- 28. 在let中使用散列()
- 29. 如何使用md5散列?
- 30. 使用散列索引
谢谢!简洁明了,除此之外还有一些背景。 – allanberry
好的答案,除了技术上不正确。当密钥不存在时'#[]'会调用'#default_proc',否则返回'#default'。默认情况下,'#default'返回'nil'。 –
@ Marc-AndréLafortune谢谢,我学到了一些新东西!更新了答案。 –