为什么人们会在ruby中的属性上使用一元运算符? 即&:首先

可能重复:
Ruby / Ruby on Rails&符号冒号快捷方式

作为一种习惯,我会尝试定期阅读一些别人的源代码并在一个要点上对其进行评论。 现在我正在阅读sinatra的基础应用程序,并发现了一些有趣的代码(这是他们的Request类的一部分)

def accept @env['sinatra.accept'] ||= begin entries = @env['HTTP_ACCEPT'].to_s.split(',') entries.map { |e| accept_entry(e) }.sort_by(&:last).map(&:first) end end 

我没有得到的部分是&:last和&:首先做什么?!? 它似乎是疯狂的!

阅读重复问题中的答案,了解&:...的含义和用法。 在这种情况下, entries是一个数组,有三种方法mapsort_bymap chained。 sort_by(&:last)等同于sort_by{|x| x.last} sort_by{|x| x.last}map(&:first)map{|x| x.first} map{|x| x.first} 。 第一个map不使用&:...的原因是因为(i) accept_entry的接收者不是e ,并且(ii)它接受参数e