Я знаю с OO Perl У меня могут быть объекты и наследование, но реализованы ли интерфейсы? Если да, то как они применяются?Есть ли эквивалент OO Perl для интерфейса?
ответ
Вы можете создать чистый виртуальный класс (или роль, если вы используете Moose или MooseX::Declare):
package Foo;
use strict;
use Carp;
sub new { croak "new not implemented" };
sub do_x { croak "do_x not implemented" };
sub do_y { croak "do_y not implemented" };
Но принудительное исполнение будет во время выполнения. В общем, интерфейсы необходимы, потому что язык не поддерживает множественное наследование и строго типизирован. Perl поддерживает множественное наследование и (используя Moose) нечто вроде множественного наследования (но лучше), называемого ролями, и оно динамически типизируется. Строгая и динамическая типизация сводится к утиному набору текста (если она уклоняется(), как утка, ходит(), как утка, и плавает() как утка, то это утка). В Perl вы говорите:
if ($some_obj->can("quack") {
$some_obj->quack;
} else {
croak "incompatible class type: ", ref $some_obj;
}
В традиционном Perl OO очень мало соблюдается. У вас есть опция $ obj-> can ('methodname') для утиного типа, что вы используете, но нет ничего похожего на интерфейс.
(Но взгляните на лося, роли в там может быть то, что вы после этого.)
Но, конечно же! Class::Interface.
Тем не менее, я сначала посмотрю на Муз. Это фантастически.
Да, у CPAN есть все. ;-) – ijw
интерфейсы необходимы, потому что язык не поддерживает
интерфейс является концепция ООП. Они не нужны из-за технической проблемы.
- 1. Есть ли эквивалент Python для «изучения» Perl?
- 2. Есть ли у OO Javascript эквивалент `to_bool` или` __len__`?
- 3. Есть ли какой-либо эквивалент C# для LWP Perl :: UserAgent?
- 4. Есть ли эквивалент Perl проекта ruby koans?
- 5. Есть ли эквивалент Node.js Perl WWW :: Механизировать?
- 6. Есть ли Perl-эквивалент Buildout или RVM?
- 7. Есть ли реляционный эквивалент DBI в Perl?
- 8. Есть ли эквивалент `tail -f` в Perl?
- 9. Есть ли эквивалент Tcl переноса Perl?
- 10. Есть ли PHP-эквивалент Perl WWW :: Mechanize?
- 11. Есть ли небольшая и красивая программа, демонстрирующая perl OO?
- 12. Есть ли эквивалент C для модуля Carp Perl?
- 13. Есть ли эквивалент tkinter для прокрученного псевдо-виджета Perl/Tk?
- 14. Есть ли эквивалент PHP mysql_real_escape_string() для Perl DBI?
- 15. Есть ли эквивалент python для модуля-стартера perl?
- 16. Есть ли эквивалент Python для модуля Perl Term :: VT102?
- 17. Есть ли эквивалент Perl для Python `if __name__ == '__main __'`?
- 18. Есть ли эквивалент Perl для String.scan, найденный в Ruby?
- 19. Есть ли эквивалент Python для `perl -pi -e`?
- 20. Есть ли эквивалент Python для оператора Perl x?
- 21. Есть ли эквивалент Python для данных Perl :: Dumper?
- 22. Есть ли эквивалент Python для разыменования в Perl?
- 23. Есть ли неглобальный эквивалент perlbrew?
- 24. Есть ли модуль Perl для интерфейса с API контактов Google?
- 25. perl oo динамические методы
- 26. Есть ли эквивалент F # для обещания Скалы?
- 27. OO-дизайн для интерфейса программы рисования
- 28. Есть ли эквивалент C# для `reply_to?` Ruby?
- 29. Perl OO - Создание списка объектов
- 30. Есть ли эквивалент собственного API-интерфейса chrome в Internet Explorer?
+1 для лося с ролями. Особенно, если вы исходите из строгого фона OO/предпочтения, он делает то, что вам нравится. –
http://stackoverflow.com/questions/1341903/c-like-usage-of-moose-with-perl-for-oop – draegtun