如何在模块内定义 class 旁边的方法?

How can I define a method aside a class inside a module?

如何在 class 之外定义一个方法,在同一模块中使用该方法?

我想做的事情:

module X
  def bar
    puts 'Hello'
  end

  class Y
    def foo
      bar
    end
  end
end

我想使用 Y.new.foo 调用 bar 方法。我想在我的模块中定义方法,以便该模块中的所有 classes 都将继承它们。

为什么这不起作用?最接近的方法是什么?

假设您不想在 class 中包含该模块,您不能引用该方法,因为没有实例可以调用它。您可以改为:

module X
  def self.bar
    puts 'Hello'
  end

  class Y
    def foo
      X.bar
    end
  end
end

如果要使用很多方法,最好使用include

module X
  def bar
    puts 'Hello'
  end

  class Y
    include X
    def foo
      bar
    end
  end
end

我认为最好使用单独的对象来定义共享方法,而不是污染名称 space 对象。

module X

  module InstanceMethods
    def bar
      puts 'Hello'
    end
  end

  class Y
    include InstanceMethods
    def foo
      bar
    end
  end

end