任何人都可以解释'&'的使用在这段红宝石代码?

时间:2013-10-04 06:02:07

标签: ruby-on-rails ruby rails-activerecord

任何人都可以解释使用'&'在这段红宝石代码中?

s.feature_addons.select(&:is_active?)

3 个答案:

答案 0 :(得分:5)

这意味着:

s.feature_addons.select { |addon| addon.is_active? }

&调用对象上的to_proc,并将其作为块传递给方法。

class Symbol
  def to_proc
    Proc.new { |*args| args.shift.__send__(self, *args) }
  end
end

你可以在其他类中定义to_proc方法:Examples

答案 1 :(得分:3)

这是to_proc的捷径。例如,您提供的代码相当于:

s.feature_addons.select {|addon| addon.is_active?}

有关它的一些旧文档可以在这里找到:

http://apidock.com/rails/Symbol/to_proc(由ActiveSupport提供时)

然后它成为了1.9核心的Ruby核心的一部分

http://www.ruby-doc.org/core-1.9.3/Symbol.html

答案 2 :(得分:1)

您可以使用此语法作为应用于整个集合的方法的简写。

它在功能上与:

相同
s.feature_addons.select { |a| a.is_active? }

您可以将它用于任何集合,例如:

User.all.map(&:id)