У меня есть следующий класс:
class Names {
has @!names;
method add-name( $name ) { @!names.push($name) }
multi method AT-POS( ::?CLASS:D: $index ) {
my $new-names-obj = Names.new;
for @!names[$index] -> $name {
$new-names-obj.add-name($name);
}
return $new-names-obj;
}
method gist {
@!names.join("\n")
}
}
Я хотел бы иметь возможность нарезать объект Names
, а возвращаемое значение должно быть другим объектом Names
, элементы которого вырезаны из оригинальный Names
объект. Например:
my $original = Names.new;
$original.add-name($_) for <jonathan joseph jotaro josuke giorno>;
my $sliced-off = $original[0..2];
say $original.^name; #=> Names
say $original; #=> jonathan, joseph, jotaro, josuke, giorno
say $sliced-off.^name; #=> List
say $sliced-off; #=> (jonathan joseph jotaro)
Когда передается один аргумент, он работает как ожидалось и как описано в этом ответе , но это не относится к диапазону, поскольку AT-POS
в конечном итоге вызывается несколько раз и собирая результаты в списке. Поэтому мне интересно, можно ли при использовании диапазона вернуть один объект $sliced-off
, а не список результатов.