为什么人们会在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
是一个数组,有三种方法map
, sort_by
和map
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
。