Ruby中命名空间函数的最佳实践?(新手问题)

Fla*_*ino 11 ruby namespaces

(StackOverflow告诉我这个问题是"主观的,可能会被关闭"......好吧,无论如何,我会试一试)

我正在编写一堆辅助方法(对于TextMate包),我想(并且我需要)将它们整齐地命名为.

这些方法实际上只是函数,即它们不在自己范围之外的任何东西上运行,因此并不真正属于一个类.没有什么需要实例化的.

到目前为止,我一直在这样做,这很好

module Helpers::Foo
    module_function
    def bar
        # ...
    end
end
Helpers::Foo.bar # this is how I'd like to call the method/function
Run Code Online (Sandbox Code Playgroud)

但是它会更好:
1.跳过module_function并声明方法/功能为self.*
2.或者声明一个类而不是一个模块会更好吗?
3.还是使用class << self(在模块或类中)?
还是别的什么呢?

我意识到这是一个非常开放的问题,但我真的只是想听听人们在做什么.

Jed*_*der 8

我也喜欢

module Foo
  def self.bar
    "bar"
  end
end

Foo.bar #=> "bar"
Run Code Online (Sandbox Code Playgroud)

要么

module Foo
  def Foo.bar
    "bar"
  end
end

Foo.bar #=> "bar"
Run Code Online (Sandbox Code Playgroud)

但可能倾向于前者,我认为这self.是真正具有描述性的.

编辑:在阅读评论后,我提出了第三个选项,我更喜欢它的可读性.从技术上讲,我认为这将被定义为扩展Eigen类中包含的方法.

module Foo
  module ClassMethods
    def baz
      "baz"
    end
  end
  extend ClassMethods
end

Foo.baz #=> "baz"
Run Code Online (Sandbox Code Playgroud)

  • 好点子.但我担心"自我"会在我的代码中失去意义,因为几乎所有东西都是一个只包含帮助函数的模块.所以_everything_将被定义为`self. - 在这种情况下,我不能将任何东西定义为`self`并使用`module_function`代替. (2认同)