Как мне объявить необязательный параметр в подписи? - PullRequest
0 голосов
/ 04 февраля 2019

Допустим, у меня есть

use v5.026;
use feature 'signatures';

sub foo ($opt1, $opt2) {
  say $opt1 if $opt2;
}

main::foo(1,2);
main::foo(1);

Теперь я хочу позвонить foo с и без opt2:

foo(1);    # not currently accepted
foo(1,2);  # works fine

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Можно также разрешить любое количество необязательных параметров, заканчивая подпись массивом, который отбрасывает все оставшиеся аргументы, а также не допускает значений, как при обычном присвоении массива.

sub foo ($opt1, @opts) {
0 голосов
/ 04 февраля 2019

Необязательные параметры с подписями подпрограммы требуют определенного значения по умолчанию, которое выполняется с = default_value_expression.Вы можете установить это значение на undef:

sub foo ($opt1, $opt2 = undef) {
  say $opt1 if $opt2;
}
...