Чистая реализация паттерна стратегии на Perl

Как мне написать чистую реализацию шаблона стратегии на Perl? Я хочу сделать это так, чтобы использовать возможности Perl.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
1 077
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте подссылки и замыкания. Хороший пример этого

sort { lc($a) cmp lc($b) } @items
Ответ принят как подходящий

Это действительно зависит от того, что вы подразумеваете под «чистой реализацией». Как и в любом другом языке, вы можете использовать объектную систему Perl с полиморфизмом, чтобы сделать это за вас. Однако, поскольку Perl имеет функции первого класса, этот шаблон обычно явно не кодируется. Пример Леона Тиммерманса

sort { lc($a) cmp lc($b) } @items

демонстрирует это довольно элегантно.

Однако, если вы ищете «формальную» реализацию, как в C++, вот как она может выглядеть при использовании Perl + лось. Это просто перевод кода C++ из Википедия - Шаблон стратегии, за исключением того, что я использую поддержку Moose для делегирования.

package StrategyInterface;
use Moose::Role;
requires 'run';


package Context;
use Moose;
has 'strategy' => (
  is      => 'rw',
  isa     => 'StrategyInterface',
  handles => [ 'run' ],
);


package SomeStrategy;
use Moose;
with 'StrategyInterface';
sub run { warn "applying SomeStrategy!\n"; }


package AnotherStrategy;
use Moose;
with 'StrategyInterface';
sub run { warn "applying AnotherStrategy!\n"; }


###############
package main;
my $contextOne = Context->new(
  strategy => SomeStrategy->new()
);

my $contextTwo = Context->new(
  strategy => AnotherStrategy->new()
);

$contextOne->run();
$contextTwo->run();

Другие вопросы по теме