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

时间:2011-01-28 16:07:14

标签: 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

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

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

1 个答案:

答案 0 :(得分:8)

我更喜欢

module Foo
  def self.bar
    "bar"
  end
end

Foo.bar #=> "bar"

module Foo
  def Foo.bar
    "bar"
  end
end

Foo.bar #=> "bar"

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

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

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

Foo.baz #=> "baz"