|
|
1
54
我认为第一个事实上是另一个的语法糖。换句话说,没有行为上的差异。 第二种形式允许将块“保存”到变量中。然后可以在其他时间点调用该块——回调。 好啊这次我去做了一个快速的基准测试:
结果很有趣:
这表明使用 块呼叫 几乎是使用速度的2倍 产量 . |
|
|
2
8
其他的答案都是非常详尽的 Closures in Ruby 广泛涵盖了功能差异。我很好奇哪种方法对那些 选择性地 接受一个块,所以我写了一些基准测试(即将开始) this Paul Mucur post ).我比较了三种方法:
以下是代码:
Ruby 2.0.0p247和1.9.3p392的性能相似。以下是1.9.3的结果:
添加显式
也就是说,这些是一百万次迭代的结果,所以不要太担心。如果有一种方法以百万分之一秒的代价让代码更清晰,那还是使用它吧。 |
|
|
3
7
如果您忘记传递一个块,它们会给出不同的错误消息:
但如果你试图传递一个“正常”(非阻塞)参数,它们的行为是相同的:
|
|
|
4
2
我发现结果是不同的,这取决于您是否强制Ruby构建块(例如,一个预先存在的proc)。
给出了结果:
如果你改变
|
|
|
5
0
顺便说一句,只需使用以下工具将此更新到当前日期:
在英特尔i7(1.5年历史)上。
还是慢了2倍。有趣的 |