可能重复:
map(&:name)在Ruby中意味着什么?
有什么东西survey.map(&:questions).flatten.compact叫做,所以我可以找到更多关于它们的信息:).这&:解决了什么问题,或者它究竟做了什么?它是否用于其他语言?
Mat*_*chu 18
这是以下的简写:
survey.map { |s| s.questions }.flatten.compact
Run Code Online (Sandbox Code Playgroud)
这是Symbol#to_proc方法.它曾经是Rails的ActiveSupport的一部分,但后来被添加到Ruby语法中.
就性能而言,我编写了一个快速基准脚本,以了解1.8和1.9中的性能效果.
require 'benchmark'
many = 500
a = (1..10000).to_a
Benchmark.bm do |x|
x.report('block once') { a.map { |n| n.to_s } }
x.report('to_proc once') { a.map(&:to_s) }
x.report('block many') { many.times { a.map { |n| n.to_s } } }
x.report('to_proc many') { many.times { a.map(&:to_s) } }
end
Run Code Online (Sandbox Code Playgroud)
首先,在给你结果之前 - 如果你还不确定Ruby 1.9是一般的巨大速度提升,那么准备好被吹走.
user system total real
block once 0.020000 0.000000 0.020000 ( 0.016781)
to_proc once 0.010000 0.000000 0.010000 ( 0.013881)
block many 6.680000 1.100000 7.780000 ( 7.780532)
to_proc many 7.370000 0.540000 7.910000 ( 7.902935)
Run Code Online (Sandbox Code Playgroud)
user system total real
block once 0.010000 0.000000 0.010000 ( 0.011433)
to_proc once 0.000000 0.000000 0.000000 ( 0.004929)
block many 4.060000 0.000000 4.060000 ( 4.057013)
to_proc many 2.810000 0.000000 2.810000 ( 2.810312)
Run Code Online (Sandbox Code Playgroud)
首先:哇.Ruby 1.9很快.但是我们在这里得出的更相关的结论很有趣:
to_proc显然更快.在多次运行的1.8中,它的速度稍慢.这似乎表明唯一真正的性能瓶颈是创建所有这些Proc对象.to_proc无论你执行多少次,该方法显然比块快得多.在这种情况下,您不仅可以获得更清晰的代码,还可以提高性能.最后,无论你使用哪个版本,to_proc显然还不足以让性能问题不值得使用 - 事实上,它有时会加快速度!
| 归档时间: |
|
| 查看次数: |
1476 次 |
| 最近记录: |