是否有可能创建一个模块或父类,使Ruby中的所有方法类方法?

时间:2014-09-27 22:43:42

标签: ruby

类方法通常使用self.fooclass << self定义。

是否可以通过使用模块或父类来创建所有方法类方法?

例如:

class Foo
  include ClassMethods

  def bar

class Foo < ClassMethods
  def bar

并使用

Foo.bar

ClassMethods会是什么?

2 个答案:

答案 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