有人可以解释一下课程<<对我自我?

时间:2010-11-10 22:22:43

标签: ruby-on-rails ruby

我第一次跳进rails编程,在查看我下载的一些库的代码时,偶尔会注意到代码:

class << self
  def func
     stuff
  end
end

我已尝试在网上搜索解释,但&lt;&lt;从最有用的搜索引擎中删除,所以它最终只是搜索类自我,这不是很有用。任何见解都将不胜感激。

2 个答案:

答案 0 :(得分:12)

在Ruby中,class << foo打开foo引用的对象的单例类。在Ruby中,每个对象都有一个与之关联的单例类,它只有一个实例。这个单例类保存特定于对象的行为,即单例方法。

因此,class << self打开了self的单例类。当然,self 究竟是什么取决于您所处的环境。例如,在模块或类定义体中,它是模块或类本身。

如果您正在使用单例类,则定义单例方法,实际上有一个快捷方式:def foo.bar

这是一个如何使用单例方法提供一些与特定实例没有任何关联的“程序”的例子:

class << (Util = Object.new)
  def do_something(n)
    # ...
  end
end

Util.do_something(n)

答案 1 :(得分:3)

相当于

def self.func
  stuff
end

除了嵌套在其中的所有方法都是类方法。它允许您声明许多方法是类方法,而不是在self上对每个方法进行十进制处理。