Ruby 访问“class

Ruby 访问“class,ruby,metaprogramming,class-method,Ruby,Metaprogramming,Class Method,在观看时,我遇到了主持人戴夫·托马斯提出的一个有趣的问题。他在谈论我们在Ruby类方法定义中经常看到的语法: class Foo class << self def bar puts "inside class method" end def self.baz puts "inside anonymous superclass method" end end end 当然,我们可以访问Foo.bar,但是如何访问baz

在观看时,我遇到了主持人戴夫·托马斯提出的一个有趣的问题。他在谈论我们在Ruby类方法定义中经常看到的语法:

class Foo
  class << self
    def bar
      puts "inside class method"
    end
    def self.baz
      puts "inside anonymous superclass method"
    end
  end
end

当然,我们可以访问Foo.bar,但是如何访问baz呢?Dave Thomas在视频的最后谈到了课堂,我们得到了这个问题的几个答案

首先,一些相当丑陋的东西。您可以重新打开该类:

class Foo
  class << self
    baz
  end
end
或者,您可以最优雅地打开类并向其中添加方法:

class Class
  def meta
    class << self
      self
    end
  end
end

# class Foo ...

Foo.meta.baz

这只是Objectsingleton_类的重新实现。

在视频的最后,Dave解释了几种实现方法,每种方法都比最后一种更优雅。你的Classmeta只是Objectsingleton_类的重新实现。
class Class
  def meta
    class << self
      self
    end
  end
end

# class Foo ...

Foo.meta.baz