作为一种习惯,我会尝试定期阅读一些别人的源代码并在一个要点上对其进行评论。现在我正在阅读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和&:首先做什么?!?它似乎是疯狂的!
答案 0 :(得分:1)
阅读重复问题中的答案,了解&:...
的含义和用法。在这种情况下,entries
是一个数组,有三种方法map
,sort_by
和map
已链接。 sort_by(&:last)
相当于sort_by{|x| x.last}
。 map(&:first)
与map{|x| x.first}
相同。第一个map
不使用&:...
的原因是因为(i)accept_entry
的接收者不是e
,而(ii)它接受了e
参数}。