我曾被告知要使用fetch(:key) { nil }而不是fetch(:key, nil)因为即使nil需要一些内存,只有在找不到密钥时才更好地评估它.
我不确定这是否正确.这个块也不会占用一些内存吗?有没有办法检查这个?
这是一些你不应该担心的微观优化.差异更具语义性.如果:key找不到,
fetch(:key, nil)
Run Code Online (Sandbox Code Playgroud)
将返回值nil.
fetch(:key) {nil}
Run Code Online (Sandbox Code Playgroud)
将评估该块并返回该值,但nil如果您使用,则无论如何都是返回值hash[:key]
对于这样一个微不足道的案例,我建议使用fetch(:key, nil).
当且仅当:key未找到时,传递块将使您能够计算更复杂的值,例如:
fetch(:key) { read(url).parse.get('value') }
Run Code Online (Sandbox Code Playgroud)
如果你真的想知道哪一个更有效,你可以尝试对它进行基准测试,虽然如果块调用没有优化,我很确定块会慢一点.