2010-11-09 73 views
0

我很新的红宝石,<<运营商红宝石

我遇到了在轨道下面的代码,但我不知道它是怎么了“< <”操作可行,什么在下面的代码

def <<(rate) 
    r = Rating.new 
    r.rate = rate 
    r.rateable = proxy_owner 
    ... 
    ... 
end 
class << ActiveRecord::Base 
    ... 
    ... 
end 

有人可以向我解释吗?

编辑:这里是代码https://github.com/azabaj/acts_as_rateable/blob/master/lib/acts_as_rateable.rb

+0

第一种方法“真的在任何类别之外?在这种情况下,它将作为运算符<<的默认含义应用于所有类。 – giraff 2010-11-09 15:41:06

回答

3

def <<(rating): 在你的榜样,这是用于将添加评分应课差饷租模式。 (例如acts_as_rateable.rb:41),类似于将某些东西附加到字符串(str << "abc")。由于它位于模块内部,因此只会包含在您声明为可评级的模型中。

class << ClassName

所有这些块的内部的方法是静态的/类的方法(参见this blog entry)。 (在这种情况下,所有模型都将具有Model.example_static_method方法)。

+0

+1解释第二个问题,我实际上不知道。我不知道我为什么得到复选标记,对不起。 :-( – 2010-11-09 18:35:29

+0

没问题.... – giraff 2010-11-09 18:49:30

+0

哦,好多了。恭喜你的好评勾号。 – 2010-11-09 20:25:56

2

几乎Ruby中的所有运算符实际上都是在它们之前的对象上调用的实例方法。

<<有很多不同的用途,具体取决于您要调用的对象类型。例如,在一个数组中,这可以将给定值推送到数组的末尾。

它看起来像这是一个Rails模型对象,所以在这种情况下,我会说这是一个辅助方法,当你追加一个模型对象到模型对象集合时被调用。例如,在这种情况下,您可能会将附加评级添加到产品。

如果你展示了整个方法的定义并展示了它的类,我可以提供一个更具体的答案。

+0

这里是def <<(rate)的完整代码... https://github.com/azabaj /acts_as_rateable/blob/master/lib/acts_as_rateable.rb – Madhusudhan 2010-11-09 15:59:18