Как мы можем указать атрибуты аргумента Callable в подпрограмме - PullRequest
0 голосов
/ 09 декабря 2018

Это взято из этой perl6/doc проблемы , которая также относится к этим вопросам в канале IRC

Документация указывает, как ограничить аргументы вызываемого объекта с помощью литерала подписи :

sub f(&c:(Int, Str))  { say c(10, 'ten') };

(это ограничит аргумент функции только теми, которые принимают Integer и String какаргумент).

Однако в некоторых других ситуациях может использоваться ограничение where, например, если вам нужно ограничить арность или возвращаемые значения.Однако есть ли более простой способ или синтаксис для этого?

1 Ответ

0 голосов
/ 09 декабря 2018

Чтобы применить арность, например, 2, можно также использовать литерал подписи:

sub foo(&x:($,$)) {
    x(1,2)
}

Тогда это работает:

foo -> $a, $b { say $a + $b }

Пока это умирает:

foo -> $a { say $a }

Этот сигнатурный литерал просто означает «любые два аргумента».Тип возврата также может быть ограничен с помощью аналогичных средств:

sub foo(&x:(--> Int)) {
    say x()
}

Значение этого работает:

foo sub (--> Int) { 42 }

Но это умирает:

foo sub () { "oops" }
...