Perl: статические методы vs Package
Мне нужно создать пакет, который будет использоваться другими разработчиками.
Как лучше всего реализовать статические методы?
Для статических методов (класса) я должен ожидать 1-й параметр $class, и метод должен быть вызван как метод класса:
My::Package->Sub1();
С другой стороны, я могу написать "обычную" подпрограмму пакета (не ожидаемый параметр $class), которая будет прекрасно делать то же самое, но должна быть вызвана по-другому
My::Package::Sub1();
Итак, в принципе нет никакой разницы с бизнесом функциональная перспектива (по крайней мере, я ее не вижу, кроме доступности имени пакета через первый параметр), но 2 разных способа реализации и вызова. Немного сбивает с толку.
Какой путь я должен использовать и когда? Есть ли какое-то правило?
Кроме того, должен ли я проверить, был ли метод вызван так, как я ожидал (static vs package)?
1 ответ:
Во-первых, функциональная точка: если 2-й класс является create, который наследует от
Таким образом, ради программистов, использующих ваш модуль, вы захотите, чтобы все подпрограммы в пакете / классе отвечали согласованной структуре/методологии вызова. Ваш модуль должен быть либо библиотекой подпрограмм / функций, либо класс , полный методов. Если часть ее-ОО, пусть она вся ОО. Можно создавать подпрограммы для работы в смешанном режиме, но это излишне усложняет код и, похоже, вышло из моды на CPAN. Теперь, если действительно нет причин различатьMy::Package,Child::Class::Sub1()будет неопределенным, и еслиSub1записывается как не-OO Подпрограмма,Child::Class->Sub1()будет игнорировать тот факт, что она вызывается изChild::Class.My::Package->Sub1()иChild::Class->Sub1(), Вы можете смело игнорировать неявный параметр имени класса, который вам будет передан. Это не означает, что вы не должны ожидать этого параметра или что вы должны поощрять не-OO формат вызова в модуле OO.
Comments