Ruby 访问“class
在观看时,我遇到了主持人戴夫·托马斯提出的一个有趣的问题。他在谈论我们在Ruby类方法定义中经常看到的语法: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
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