Rails :: module_name vs module_name и модули, разделенные между несколькими файлами - PullRequest
1 голос
/ 03 июня 2019

Допустим, у меня есть модуль синтаксического анализа (parser.rb) внутри app/lib:

module Parsers
    class XMLParser
        def self.parse
            "Parsing XML...."
        end
    end

    class TXTParser
        def self.parse
            "Parsing TXT...."
        end
    end
end

Я видел, как некоторые люди звонили так:

@parse_xml = ::Parsers::XMLParser.parse
@parse_txt = ::Parsers::TXTParser.parse

Вместо:

@parse_xml = Parsers::XMLParser.parse
@parse_txt = Parsers::TXTParser.parse

Оба способа работают, так в чем же разница? Также я видел случаи, когда модуль разбивается на несколько файлов, например:

Внутри app/lib/parsers/xml_parser.rb:

module Parsers
    class XMLParser
        def self.parse
            "Parsing XML...."
        end
    end
end

А внутри app/lib/parsers/txt_parser.rb:

module Parsers
    class TXTParser
        def self.parse
            "Parsing XML...."
        end
    end
end

Есть ли какая-либо разница (помимо очевидного ... что файлы меньшего размера) между обеими опциями?

1 Ответ

1 голос
/ 03 июня 2019

Оба способа работают, так в чем же разница?Кроме того, я видел случаи, когда модуль разделен на несколько файлов, например:

:: позволяет вам целевые области корневого уровня.По умолчанию ruby ​​ищет текущее дерево областей, в котором вы находитесь. Я знаю, что это звучит расплывчато, но пример прояснит это:

module A
  module B
    def self.test
      A::C.test
      D::B.test
      ::D::B.test
    end
  end

  module C
    def self.test
      p "calling A::C"
    end
  end

  module D
    module B
      def self.test
        p "calling A::D::B"
      end
    end
  end
end

module D
  module B
    def self.test
      p "calling D::B"
    end
  end
end

A::B::test

Это выведет:

"calling A::C"
"calling A::D::B"
"calling D::B"

Есть ли какая-либо разница (помимо очевидного ... что файлы меньшего размера) между обеими опциями?

Обе они будут работать одинаково.Как правило, в ruby ​​вы делаете одно определение класса для каждого файла с именем файла, названным в честь класса.Так что вы чаще будете видеть версию из двух файлов, и я бы порекомендовал это для стиля, но это не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...