Поведение можно понять, зная, что наряду с синтаксисом присваивания существует также синтаксис привязки сигнатуры, где левая часть имеет в основном все функции параметров в сигнатуре (за исключением пары функций NIY):
<Zoffix__> m: my ($a, $b = 33) := \(); dd [$a, $b]
<camelia> rakudo-moar 472f6e484: OUTPUT: «Too few positionals passed to '<unit>'; expected 1 or 2 arguments but got 0 in block <unit> at <tmp> line 1»
<Zoffix__> m: my ($a, $b = 33) := \(100); dd [$a, $b]
<camelia> rakudo-moar 472f6e484: OUTPUT: «[100, 33]»
<Zoffix__> m: my ($a, $b = 33) := \(100, 200); dd [$a, $b]
<camelia> rakudo-moar 472f6e484: OUTPUT: «[100, 200]»
Итак, вы объявляете необязательные параметры со значениями по умолчанию.Вот почему ваш следующий пример говорит о необходимых параметрах;вы не можете поставить обязательные после опций в рутинных подписях.Однако, поскольку вы фактически не выполняете никакой привязки, переменные остаются неназначенными.
будет автоматически отброшено
Возможно, мы сможем реализовать некоторую эвристику для обнаружения этого случая ипредупредить пользователя об этом, когда LHS выглядит как регистр подписи, а инициализатор отсутствует.Подано это как R # 1864 .