Скалярные лепешки?

Насколько мне (и документам) известно, slurpies можно использовать только с массивом или хеш-параметры. Однако недавно я опечатался в синтаксисе и ввел то, что похоже на синтаксис для скалярного слаппи. К моему большому удивлению, это не привело к синтаксической ошибке. После некоторых экспериментов я определил, что разрешено следующее:

sub f(*$a)  {}
sub g(**$a) {}
sub h(+$a)  {}

Однако я не мог видеть, что (если вообще) делал этот синтаксис. Так что же происходит? Это недостаточно документированная функция? Ошибка, из-за которой неверный синтаксис не выдает ошибку? Что-то совсем другое?


person codesections    schedule 13.02.2021    source источник
comment
Основываясь на моем прочтении S06, можно было бы иметь такую ​​подпись, как \(*$a, *@bcdef), которая была бы фактически идентична \(*@ [$a, *@bcdef). Во многих случаях это может быть идентично \($a, *@bcdef). но не всегда из-за уплощения некоторых сларпи (особенно одиночной звезды).   -  person user0721090601    schedule 14.02.2021


Ответы (1)


Так что же происходит? Это недостаточно документированная функция? Ошибка, из-за которой неверный синтаксис не выдает ошибку? Что-то совсем другое?

Его недокументированное и сломанное поведение. Предполагалось, что у него будет другое поведение. Это зарегистрированная ошибка. См. скалярные параметры Slurpy (и продублируйте https://github.com/Raku/old-issue-tracker/issues/5656) для дальнейшего обсуждения. .

person raiph    schedule 14.02.2021
comment
Интересно, спасибо. Между тем, что сказал @user0721090601, я обнаружил, что это поведение (вроде) проверено в Roast: github.com/Raku/roast/blob/master/S06-signature/ - person codesections; 14.02.2021