ruby – 为什么“class << self”中的self指的是类?

下面的代码输出“我是事.”

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

Thing.foo

我认为“自我”指的是Thing类型的对象,但它指的是Thing类.我从上一个问题(在评论链接)中收集到,这与Thing是Object的一个实例有关.块是否以类<<开头? self实际上是在“self”指的是Thing作为实例的上下文中执行的?这里发生了什么?

解决方法

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

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

尝试上面的代码,你可能会看到那里发生的事情:首先解析类,然后执行一个puts.然后把“===”打印出“===”字符串.然后,从方法内部打印实例.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...