C ++-like использование Американского лося с Perl для ООП

Я сделал вполне немного с Мудрой Строкой 50 V9 (несколько старых версий, я знаю). Мудрец обеспечивает драйвер ODBC, с которым можно счастливо говорить с ADO & ADO.NET. Драйвер однако только для чтения, который может или не может быть проблемой Вам. Кажется, существуют некоторые ограничения с SQL-запросами, хотя - в частности, двойные соединения не работают (СОЕДИНЕНИЕ b ПРИСОЕДИНЯЮТСЯ к c), & потребность, которая будет сглажена. Кроме того, ОТЛИЧНОЕ ключевое слово, кажется, не распознано. Надеюсь это несколько полезное.

6
задан Sinan Ünür 27 August 2009 в 16:04
поделиться

4 ответа

Я могу думать об этом, используя роли вместо подкласса:

{
    package AbstractRole;
    use Moose::Role;
    requires 'stuff';  
}

{
    package Real;
    use Moose;
    with 'AbstractRole';
}

Это приведет к ошибке компиляции, потому что Real не имеет определенного материала .

Добавление Метод stuff для Real теперь заставит его работать:

{
    package Real;
    use Moose;
    with 'AbstractRole';

    sub stuff { print "Using child function!\n" }
}
5
ответ дан 8 December 2019 в 18:39
поделиться

Вы также можете взглянуть на Джесси Люрса. MooseX :: ABC . Кажется, это очень похоже на некоторые реализации здесь. Из синопсиса:

package Shape;
use Moose;
use MooseX::ABC;

requires 'draw';

package Circle;
use Moose;
extends 'Shape';

sub draw {
    # stuff
}

my $shape = Shape->new; # dies
my $circle = Circle->new; # succeeds

package Square;
use Moose;
extends 'Shape'; # dies, since draw is unimplemented

Я знаю, что Джесси днем ​​работает программистом на C ++.

5
ответ дан 8 December 2019 в 18:39
поделиться

Похоже, я не могу делать то, что хочу, с Moose, но я могу очень близко подойти к ролям. Вот информация из руководства Moose , запись для ролей:

Роли в сравнении с абстрактными базовыми классами

Если вы знакомы с концепцией абстрактных базовых классов в других языков, у вас может возникнуть соблазн использовать роли аналогичным образом.

Вы можете определить "только интерфейс" роль, содержащая только список требуемые методы.

Однако любой класс, который использует это роль должна реализовывать все требуемые методы, либо напрямую, либо по наследству от родителя. Вы не может отложить требование метода проверьте, чтобы они могли быть реализованы будущими подклассами.

Поскольку роль определяет требуемые методы напрямую, добавляя базовый класс к миксу ничего не добьешься. Мы рекомендуем вам просто потреблять роль интерфейса в каждом классе, который реализует этот интерфейс.

2
ответ дан 8 December 2019 в 18:39
поделиться

Это была моя попытка (без ролей, для информацию о ролях см. другие ответы):

package Abstract;
use Moose;

sub stuff;

package Real;
use Moose;
extends 'Abstract';

override 'stuff' => sub { print "Using child function!\n"; }
1
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: