Подтвердить что ты не робот

Лучшая практика для функций namespacing в Ruby? (начинающий вопрос)

(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 (внутри модуля или класса)?
4. Или что-то еще?

Я понимаю, что это довольно открытый вопрос, но я действительно просто хочу услышать, что делают люди.

4b9b3361

Ответ 1

Я предпочитаю либо

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"