为什么人们会在红宝石的属性上使用一元运算符?即&首先

时间:2011-06-09 06:50:43

标签: ruby block unary-operator

  

可能重复:
  Ruby/Ruby on Rails ampersand colon shortcut

作为一种习惯,我会尝试定期阅读一些别人的源代码并在一个要点上对其进行评论。现在我正在阅读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和&:首先做什么?!?它似乎是疯狂的!

1 个答案:

答案 0 :(得分:1)

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