谁能解释这段 ruby 代码中“&”的用法?
s.feature_addons.select(&:is_active?)
谁能解释这段 ruby 代码中“&”的用法?
s.feature_addons.select(&:is_active?)
它的意思是:
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
您可以在其他类中定义方法:示例
这是to_proc
. 例如,您提供的代码相当于:
s.feature_addons.select {|addon| addon.is_active?}
可以在此处找到一些旧文档:
http://apidock.com/rails/Symbol/to_proc(由 ActiveSupport 提供时)
然后它在 1.9 中成为 Ruby 核心的一部分
您可以将此语法用作应用于整个集合的方法的简写。
它在功能上与以下内容相同:
s.feature_addons.select { |a| a.is_active? }
您可以将它与任何集合一起使用,例如:
User.all.map(&:id)
ETC