2013-10-14 4 views
2

Я хотел бы кодировать OO в Perl, как это:Perl - ООП/Moose - подписи метод

use MooseX::Declare; 
use Method::Signatures::Modifiers; 
use v5.14.2; 


class Talker 
{ 
    method talk (Str $text) { 
     $self=>say $text; 

    } 

    my $talk_object = Talker->new(); 
    $talk_object->talk('Hello!'); 
} 

К сожалению, это довольно медленно, я не мог найти мышь или Moo эквивалентный ему. Как жаль, что у Perl нет ничего подобного PyPy.

Кто-нибудь знает, как архивировать то же самое с более легкими реализациями?

+1

Как насчет этого медленно? Если вы говорите о воздействии во время компиляции с помощью Moose, лучше избегать повторной компиляции, используя какой-то постоянный код. – AKHolland

+0

Да, это время компиляции. По крайней мере, насколько я вижу сейчас. Пытаться избежать повторной компиляции здесь не очень приятно ...: /. Посмотрите на Moops. К сожалению, ООП по-прежнему имеет какой-то плохой вкус в Perl из-за этих беспорядков. – royskatt

ответ

5

Экспериментальный модуль Moops - это еще одно расширение синтаксиса, которое работает довольно похоже. Он вдохновлен MooseX :: Declare (но быстрее) и проектом p5-mop, который пытается принести такой синтаксис в ядро ​​perl.

Ваш пример будет переведен без значительных изменений. Если вы хотите указать MOP-сервер, вы можете объявить класс, например class Foo using Moose, но по умолчанию он равен Moo, что проще, чем Moose.

+2

Это определенно стоит посмотреть на Moops. Кажется, чтобы получить разумный баланс между весом и удобством для меня - просто начал пробовать его в некоторых небольших сценариях, управляемых cron. Время запуска кажется мне хорошим. Однако требуется недавняя версия (5.14+) Perl. –