1

谁能解释这段 ruby​​ 代码中“&”的用法?

s.feature_addons.select(&:is_active?)
4

3 回答 3

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您可以在其他类中定义方法:示例

于 2013-10-04T06:05:33.537 回答
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

于 2013-10-04T06:05:43.823 回答
1

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

它在功能上与以下内容相同:

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

您可以将它与任何集合一起使用,例如:

User.all.map(&:id)

ETC

于 2013-10-04T06:08:24.787 回答