【问题标题】:Can someone please explain class << self to me?有人可以向我解释 class << self 吗?
【发布时间】:2011-05-08 04:11:18
【问题描述】:

我是第一次接触 Rails 编程,在查看我下载的一些库的代码时,我偶尔会注意到代码:

class << self
  def func
     stuff
  end
end

我尝试在网上搜索解释,但

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

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

所以,class &lt;&lt; self 打开了 self 的单例类。 self 究竟是什么,当然取决于你所处的环境。例如,在模块或类定义主体中,它是模块或类本身。

如果您使用单例类的目的只是定义单例方法,那么实际上有一个快捷方式:def foo.bar

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

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

Util.do_something(n)

【讨论】:

  • 所以它基本上是 Ruby 处理像 Java 这样的语言中的静态方法的方式?有什么不同吗?
  • @Wade - def 部分就像一个静态方法,是的。但是您可以在 open class
【解决方案2】:

相当于

def self.func
  stuff
end

除了嵌套在其中的所有方法都是类方法。它允许您将许多方法声明为类方法,而无需在self 上标记每个方法。

【讨论】:

  • 没错,但这是常见的情况。
猜你喜欢
  • 2012-04-09
  • 2021-02-18
  • 2023-02-08
  • 2011-01-08
  • 2014-04-20
  • 2011-04-24
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多