Лучшая практика для функций пространства имен в Ruby?(вопрос новичка) - PullRequest
11 голосов
/ 28 января 2011

(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. Или что-то еще целиком?

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

1 Ответ

8 голосов
/ 29 января 2011

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

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...