gpt4 book ai didi

ruby - 嵌套 yield 或 conversion to block 更快吗?

转载 作者:数据小太阳 更新时间:2023-10-29 08:13:09 26 4
gpt4 key购买 nike

在 Ruby 中,人们常说 yield 比将 block 转换为 Proc 更快。​​

例如:

def method
yield
end

def method &block
block.call
end

但是,如果一个 block 需要作为参数传递到几层深处怎么办? yield 是否总是更快,无论您向下传递多少层?它取决于多少层,还是取决于每个闭包中变量的数量?

我问的原因是因为 yield 几层深涉及将它多次包装到一个 block 中,而将它转换为 Proc 可能只这样做会节省时间一次。我也想知道这是否取决于to_proc方法中需要打包多少个变量。

因此,哪个更快:

嵌套 yield ?

def method1;method2 {yield};end
def method2;method3 {yield};end
...
def methodn;yield;end

还是&block

def method1 █method2 █end
def method2 █method3 █end
...
def methodn █block.call;end

最佳答案

require "benchmark"

def test_yield
yield
end

def test_block(&block)
block.call
end

Benchmark.bm do |b|

b.report("test_yield") {
10000.times{ test_yield {1+1} }
}

b.report("test_block") {
10000.times{ test_block {1+1} }
}

end



user system total real
test_yield 0.000000 0.000000 0.000000 ( 0.002623)
test_block 0.000000 0.000000 0.000000 ( 0.009497)

Yield 似乎比 block.call 快。不过,我很想知道为什么。

关于ruby - 嵌套 yield 或 conversion to block 更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12348853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com