Ruby中的“&:name”是什么意思

我在一些人发布的示例Ruby代码中看到了它。 它是这样的:

a.sort_by(&:name) 

其中a是数组或ActiveRecord对象,并且:name是其中一个属性。

我从未见过&:name和Ruby的Symbol类文档没有说明它。 可能真的很简单。 🙂

Unary Ampersand是函数/ block / lambda的地址

在这种情况下,这意味着.sort_by函数将使用每个元素的名为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 }