ruby - 为什么 "class << self"中的 self 指的是类?

标签 ruby

下面的代码输出“I am Thing”。

class Thing
   class << self
      def foo
         puts "I am #{self}."
      end
   end
end

Thing.foo

我以为“self”指的是 Thing 类型的对象,但它指的是 Thing 类。我从之前的一个问题(评论中有链接)中了解到,这与 Thing 是 Object 的一个实例有关。以 class << self 开头的 block 实际上是在“self”将 Thing 称为实例的上下文中执行的吗?这里发生了什么?

最佳答案

方法内部 self 指的是实例,在类/模块定义内部,但在任何方法之外——指类/模块本身。

class Thing
  puts self.inspect
  def foo
    puts self.inspect
  end
end
puts "==="
Thing.new.foo

试试上面的代码,你可能会看到那里发生了什么:类首先被解析,第一个 puts 被执行。然后 puts "===" 打印出 "===" 字符串。然后,实例从方法内部被打印出来。

关于ruby - 为什么 "class << self"中的 self 指的是类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387792/

相关文章:

ruby-on-rails - 如何使用 RestClient 在 post 请求中发送数据

ruby-on-rails - ruby on Rails 限制用户只能访问特定数据

ruby-on-rails - 开发 gem 和测试

ruby-on-rails - 使用 rspec 测试 aasm 状态转换

Ruby 对不同数据类型按多字段多方向排序

ruby - Ruby 可以判断 USB 内存棒何时插入 Linux 上的 USB 端口吗?

ruby-on-rails - ruby respond_to_missing?叫 super 还是不叫?

用于基于命令提示符的应用程序的 Ruby 库

ruby - 帮助 Ruby FFI

ruby-on-rails - 如何扩展 Rails 应用程序