这个 &:last Ruby 结构叫啥? [复制]

Posted

技术标签:

【中文标题】这个 &:last Ruby 结构叫啥? [复制]【英文标题】:What is this &:last Ruby construct called? [duplicate]这个 &:last Ruby 结构叫什么? [复制] 【发布时间】:2011-01-13 18:45:38 【问题描述】:

可能重复:What does map(&:name) mean in Ruby?

survey.map(&:questions).flatten.compact 这样的东西叫什么,所以我可以找到更多关于它们的信息:)。 &: 解决了什么问题,或者它到底在做什么?是否用于其他语言?

【问题讨论】:

***.com/questions/1217088/… 【参考方案1】:

这是以下的简写:

survey.map  |s| s.questions .flatten.compact

这是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

首先,在给出结果之前 - 如果您还不确定 Ruby 1.9 总体上是一个巨大的速度改进,请准备好被吹走。

Ruby 1.8 结果:

                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)

Ruby 1.9 结果:

                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)

首先:哇。 Ruby 1.9 速度很快。但我们在这里得出的更相关的结论很有趣:

在这两种情况下,只有一次运行,to_proc 显然更快。在多次运行的 1.8 中,它有点慢。这似乎表明唯一真正的性能瓶颈是创建所有这些 Proc 对象。 然而,在 Ruby 1.9 中,to_proc 方法显然比块快得多,无论您执行多少次。在这种情况下,您不仅可以获得更简洁的代码,还可以提高性能。

最后,无论您使用哪个版本,to_proc 显然都不足以成为值得不使用的性能问题 - 事实上,它有时会加快速度!

【讨论】:

+1 Yuppers!它调用相关对象的方法。很好的例子。 它是否有一个特定的术语,它是否用于其他语言? Symbol#to_proc 是我能找到的最好的。也许更多的谷歌搜索会更好...... 使用 &: 符号的执行时间要长得多 @klochner: 长于……什么?长于.map(:questions.to_proc)?长于.map |s| s.questions?两个都?还有什么?

以上是关于这个 &:last Ruby 结构叫啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

这个css结构叫啥?

这个 SQL 选择结构叫啥?

这个布尔定律叫啥

这种解析器设计模式叫啥?使用包含关键字和函数指针的结构数组的解析器?

数据结构中的是树形的结构都有哪些,算法叫啥名字?

这个按钮叫啥按钮?