Временные решения, такие как показанные в остальной части ответа, верны, но краткий ответ на ваш вопрос состоит в том, что в Perl 6 нет эквивалентного выражения в *
в Python.
Этот тип аргументов называется, как правило, переменным и * slurpy + в Perl 6, потому что они slurp остальные аргументов. И это ключ, остальное . Не может быть аргумента, объявленного после неаккуратного аргумента в подписи подпрограммы. В этом примере ниже также используется обходной путь:
sub avg( @grades ) {
return ([+] @grades) / +@grades;
}
sub drop_first_last($first, *@other-grades) {
return avg(@other-grades[0..*-1]);
}
my @grades = <10 4 8 9 10 8>;
say drop_first_last( |@grades );
но сначала использует slurpy *
в подписи, чтобы показать, как он работает, а затем, вызывая его с |@grades
, сглаживает массив вместо связывания его в аргумент массива , Таким образом, длинный ответ заключается в том, что в сигнатурах Perl 6 на самом деле есть *
или переменный символ, и он работает так же, как и в Python, но его можно поставить только последним в этих сигнатурах, поскольку он захватывает * 1020. * остальные элементов выражения.