Я работаю с некоторым кодом в Perl, который хочет, чтобы я передал ему метод. Но я хотел бы сохранить некоторое состояние о том, что происходит в методе. Я знаю, что для этого могу использовать глобальную переменную, но я бы предпочел что-то немного более чистое/объектно-ориентированное. Есть ли способ использовать Moose для создания объекта functor/function?Использование Moose в Perl для реализации функтора
0
A
ответ
5
Вам просто нужно закрыть.
sub make_closure {
my ($name) = @_;
my @greets = ('Good morning', 'Good afternoon', 'Good evening', 'Good night');
my $next = 0;
return sub { "$greets[ $next++ % @greets ], $name" };
}
my $joe = make_closure("Joe");
my $jane = make_closure("Jane");
say $joe->(); # Good morning, Joe
say $joe->(); # Good afternoon, Joe
say $jane->(); # Good morning, Jane
say $jane->(); # Good afternoon, Jane
say $jane->(); # Good evening, Jane
say $joe->(); # Good evening, Joe
Другой путь был бы сделать объект, который overloads&{}
.
use Moose;
use overload '&{}' => \&call;
has code => (is => 'rw');
has called => (is => 'rw', default => 0);
sub call {
my ($self) = @_;
$self->called($self->called() + 1);
return $self->code;
}
my $o = __PACKAGE__->new(code => sub { say "called!" });
$o->(); # called!
$o->(); # called!
say $o->called; # 2
+0
Добавлен ответ. – ikegami
Смежные вопросы
- 1. C++ - как использование Moose с Perl для OOP
- 2. Moose Perl Vs oop Perl?
- 3. Использование функтора
- 4. Perl Moose Hash черты
- 5. Perl :: Moose: использование считывающего устройства для возврата только вычисленного значения
- 6. Создайте класс perl Moose для облегчения тестирования
- 7. UML Tool for Moose Perl
- 8. Perl - ООП/Moose - подписи метод
- 9. модификаторы метода с moose perl
- 10. Perl - Moose :: Ошибка :: По умолчанию отсутствует последний релиз Moose
- 11. Сокращение для ссылок на имена пакетов Perl/Moose?
- 12. Использование CURAND внутри функтора Thrust
- 13. Perl: исправление атрибутов типа Moose и типа
- 14. Расширение класса Moose для внутреннего использования
- 15. Может ли Perl Moose создавать несколько аксессуаров?
- 16. Perl Moose аксессоров генерируемые на лету
- 17. Perl, Moose - подкласс не наследует методы суперкласса
- 18. Удалить __CLASS__ От выхода JSON объекта Moose в Perl
- 19. Какие модули Moose делают бесполезными или несовместимы с современным Perl?
- 20. Использование расширения Perl MooseX в бесшумном режиме?
- 21. Как определяющий модуль подпись которого модуль реализации параметризуется функтора
- 22. Singleton Роли в Moose
- 23. Указание сокращения функтора для сопоставленияReduce
- 24. Как я могу закодировать завод в Perl и Moose?
- 25. Как создать циклический график неизменяемых объектов в Perl и Moose?
- 26. Автоматически создавать объект атрибута в perl Moose без использования BUILDARGS
- 27. Использование вспомогательной ссылки с Moose builder
- 28. Инициализация объекта Perl/Moose с принуждением в ArrayRef
- 29. Использование blessed CodeRefs с ограничениями типа Moose
- 30. Perl/Moose - Как я могу динамически выбрать конкретную реализацию метода?
что вы имеете в виду под "передать метод к нему"? Я подозреваю, что вы можете просто означать закрытие, а Муз даже не требуется делать то, что вы хотите. более конкретный пример был бы полезен. – ysth