Я определил метод AT-POS
для класса и экспортировал оператор []
.Однако когда я использовал []
в экземпляре этого класса, компилятор игнорировал определенный мной оператор.
Вот код:
unit module somelib;
class SomeClass is export {
method AT-POS(@indices) {
say "indices are {@indices.perl}"
}
}
multi postcircumfix:<[ ]> (SomeClass:D $inst, *@indices) is export {
$inst.AT-POS(@indices)
}
#! /usr/bin/env perl6
use v6.c
use lib ".";
use somelib;
my $inst = SomeClass.new;
$inst[3, 'hi'];
# expected output:
# indices are 3, 'hi'
# actual output:
# Type check failed in binding to parameter '@indices';
# expected Positional but got Int (3)
# in method AT-POS at xxx/somelib.pm6 (somelib) line 4
# in block <unit> at ./client.pl6 line 8
Так что же такоепроблема с этим кодом?
ОБНОВЛЕНИЕ:
Мне нужно было передать более одного индекса в метод AT-POS, и я был очень удивлен, обнаружив, что использование * $ индексов, а не *@indices дал ожидаемый результат, когда я исправлял опечатку.Я не знаю, существует ли такое использование, как * $ some-parameter.Это допустимо или просто ошибка компилятора?
unit module somelib;
class SomeClass is export {
method AT-POS($indices) {
say "indices are {$indices.perl}"
}
}
multi postcircumfix:<[ ]> (SomeClass:D $inst, *$indices) is export {
$inst.AT-POS($indices)
}
#! /usr/bin/env perl6
use v6.c;
use lib ".";
use somelib;
my $inst = SomeClass.new;
$inst[3, 'hi'];
# expected output:
# indices are 3, 'hi' # or something like it
# actual output:
# indices are $(3, "hi") # It's ok for me.