【发布时间】:2012-09-03 03:39:18
【问题描述】:
在 Ruby 中,经常说yield 比将块转换为Proc 更快。
例如:
def method
yield
end
比
快def method &block
block.call
end
但是,如果需要将一个块作为参数传递几层,该怎么办?无论您传递多少层,yield 总是更快吗?是取决于多少层,还是取决于每个闭包中的变量数?
我问的原因是因为yield 几层深涉及多次将其包装成一个块,而将其转换为Proc 可能只需执行一次即可节省时间。我也想知道是否取决于to_proc方法中需要打包多少变量。
这样更快:
嵌套收益率?
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
【问题讨论】:
-
你在哪里读到的?
-
转换为 Proc 确实需要一些时间,但您为什么不直接对其进行基准测试呢? ruby-doc.org/stdlib-1.9.3/libdoc/benchmark/rdoc/Benchmark.html