Пространство имен или пакет одинаковы? Я использую Perl, где у нас есть только пакеты. Я знаю, что есть другие языки программирования, которые также включают в себя модули.
Какая разница?
Пространство имен или пакет одинаковы? Я использую Perl, где у нас есть только пакеты. Я знаю, что есть другие языки программирования, которые также включают в себя модули.
Какая разница?
Namespace
- общий вычислительный термин, означающий контейнер для отдельного набора идентификаторов. Один и тот же идентификатор может отображаться независимо в разных пространствах имен и ссылаться на разные объекты, а полнофункциональный идентификатор, который однозначно идентифицирует объект, состоит из пространства имен плюс идентификатор.
Perl реализует пространства имен, используя package
.
Модуль Perl совсем другой. Это часть кода Perl, которая может быть включена в любую программу с ключевым словом use
. Имя файла должно заканчиваться на .pm
- для P erl M odule - и содержащийся в нем код должен иметь оператор package
, используя имя пакета, которое эквивалентно имя файла, включая его путь. Например, модуль, написанный в файле с именем My/Useful/Module.pm
, должен иметь оператор package
, например package My::Useful::Module
.
То, о чем вы, возможно, и думали, является классом, который, опять же, является общим вычислительным термином, на этот раз подразумевает тип объектно-ориентированных данных. Perl использует свои пакеты как имена классов, а объектно-ориентированный модуль будет иметь подпрограмму конструктора - обычно называемую new
-, которая вернет ссылку на данные, которые были blessed
, чтобы заставить его вести себя объектно-ориентированным способом. Ни в коем случае все модули Perl являются объектно-ориентированными: некоторые могут быть простыми библиотеками подпрограмм.
Директива package
устанавливает пространство имен. Таким образом, пространство имен также называется пакетом.
Perl не имеет формального определения модуля. Там много различий, но для огромного большинства модулей выполняется следующее:
.pm
.package
, которое охватывает весь код. (Но см. Ниже.)package
.Не редко встречаются файлы .pm
с несколькими пакетами. Независимо от того, что для обсуждения обсуждается один модуль, несколько модулей или оба.