类方法通常使用self.foo
或class << self
定义。
是否可以通过使用模块或父类来创建所有方法类方法?
例如:
class Foo
include ClassMethods
def bar
或
class Foo < ClassMethods
def bar
并使用
Foo.bar
ClassMethods会是什么?
答案 0 :(得分:2)
将Class
转换为Module
并使用extend self
应该可以执行您想要的操作。对于Module中的每个方法,它都会创建一个类方法。
所以你的例子可以写成:
module Foo
extend self
def bar
另一种方法是使用Module#refine,它可以将类转换为模块。因此,您可以创建类的模块,然后使用该创建的模块扩展您的类。
答案 1 :(得分:1)
如果您能够Foo
成为模块而不是课程,请使用module_function
。
module Foo
module_function
def bar
然后这将起作用:
Foo.bar