Я пытаюсь сделать ООП с Perl6, и у меня небольшие проблемы с ролями.Я пытаюсь использовать их аналогично интерфейсу Java, где у меня будут только сигнатуры методов, которые должны быть реализованы любым классом, выполняющим роль.Я использую методы-заглушки с типизированными параметрами и возвращаемым значением.
Я замечаю, что подписи типов не применяются, только имя метода.
Пример сценария:
#!/usr/bin/env perl6
use v6;
role MyRole {
method intAdder( Int $a, Int $b --> Int ) { ... }
}
# this does the role and the method signature matches
class MyClass1 does MyRole {
method intAdder( Int $a, Int $b --> Int ) { return $a+$b }
}
# this does the role and the method signature does NOT match
# why is this allowed?
class MyClass2 does MyRole {
method intAdder( Str $a --> Str ) { return "Hello, $a." }
}
# this does the role and the method name does not match and gives an error as expected:
# Method 'intAdder' must be implemented by MyClass3 because it is required by roles: MyRole.
#
# class MyClass3 does MyRole {
# method adder( Int $a, Int $b --> Int ) { return $a+$b }
# }
sub MAIN() {
my $object1 = MyClass1.new;
my $object2 = MyClass2.new;
say $object1.intAdder: 40, 2;
say $object2.intAdder: 'world';
}
# output:
# 42
# Hello, world.
Я прочитал страницу «Ориентация объектов» в официальных документах и не могу найти способ сделать то, что хочу ... Я также пытаюсь применить Java-подход к ООП и типизированию, и, возможно, тамэто другой, более Perl6ish способ делать то, что я хочу ...