什么"&:name"用Ruby表示

时间:2015-02-11 01:08:01

标签: ruby-on-rails ruby

我在某些已发布的Ruby代码示例中看到了它。它类似于:

a.sort_by(&:name)

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

我从未见过&:name,Ruby的Symbol类文档对此一无所知。可能真的很简单。 :)

1 个答案:

答案 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 }