我在某些已发布的Ruby代码示例中看到了它。它类似于:
a.sort_by(&:name)
其中a
是数组或ActiveRecord对象,:name
是其中一个属性。
我从未见过&:name
,Ruby的Symbol类文档对此一无所知。可能真的很简单。 :)
答案 0 :(得分:4)
一元Ampersand是函数/ block / lambda的地址
在这种情况下,这意味着.sort_by
函数将使用每个a
元素的名为name
的函数进行比较
主要是用于其他东西,比如:
[1,2,3].map{ |x| x.to_s } # ['1','2','3']
可以缩短为:
[1,2,3].map(&:to_s)
因此,在您的情况下,a.sort_by(&:name)
是简写:
a.sort_by{ |x| x.name }