微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.然后把“===”打印出“===”字符串.然后,从方法内部打印实例.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐