任何人都可以解释使用'&'在这段红宝石代码中?
s.feature_addons.select(&:is_active?)
答案 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核心的一部分
答案 2 :(得分:1)
您可以使用此语法作为应用于整个集合的方法的简写。
它在功能上与:
相同s.feature_addons.select { |a| a.is_active? }
您可以将它用于任何集合,例如:
User.all.map(&:id)
等