0

可能重复:
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 和 &:first 在做什么?!?它看起来像疯了!

4

1 回答 1

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

于 2011-06-09T07:08:41.367 回答