fetch(:key,nil)vs fetch(:key){nil}.哪个更有效率?

P. *_*oro -2 ruby

我曾被告知要使用fetch(:key) { nil }而不是fetch(:key, nil)因为即使nil需要一些内存,只有在找不到密钥时才更好地评估它.

我不确定这是否正确.这个块也不会占用一些内存吗?有没有办法检查这个?

Geo*_*roy 5

这是一些你不应该担心的微观优化.差异更具语义性.如果: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)

如果你真的想知道哪一个更有效,你可以尝试对它进行基准测试,虽然如果块调用没有优化,我很确定块会慢一点.