Когда использовать класс против расширения модуля в Crystal? - PullRequest
0 голосов
/ 06 мая 2018

В Crystal есть два разных способа достижения похожих результатов:

Создание класса ...

class Service
  def self.get
    # ...
  end
end

или модуль расширения self:

module Service
  extend self

  def get
    # ...
  end
end

Оба могут вызывать метод get по Service.get.

Но когда использовать класс или модуль? В чем разница между классами Crystal и модулями?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Нет большой разницы между class и module в отношении определения методов класса. Однако они принципиально отличаются тем, что класс определяет тип, который может быть создан (Service.new). Модули также могут иметь методы экземпляра, но они не могут быть созданы напрямую, только включены в класс.

Если вам нужно только пространство имен для методов класса, вы должны использовать module. class тоже подойдет для этого, но передает другое значение.

Кстати: хотя вы не можете extend или include класс, в модуле вы можете написать def self.get вместо extend.

0 голосов
/ 07 мая 2018

Но когда использовать класс или модуль?

Использовать module.Таким образом, module может использоваться в качестве пространства имен.

В чем разница между классами и модулями Crystal?

A module не может быть создан, иможет быть включен в класс

См .: Документация по модулям

...