Перегрузка функции пакета для обнаружения отсутствия аргументов - PullRequest
7 голосов
/ 26 мая 2020

Я пытаюсь перегрузить функцию, чтобы определить, что аргументы не были переданы:

package Documentable::CLI {

        sub RUN-MAIN(|c) is export {
            my %*SUB-MAIN-OPTS = :named-anywhere;
            CORE::<&RUN-MAIN>(|c)
        }

        our proto MAIN(|) is export { * }

        multi MAIN (
            Bool :V(:$version)
        ) {}

        multi MAIN () {
            say 'Execute "documentable --help" for more information'
        }

    }

    # no output
    Documentable::CLI::MAIN();

Если вы попытаетесь использовать multi main (*@args) {}, это тоже не сработает. НО если вы удалите первое multi MAIN определение, все будет работать нормально. Есть идеи, как это решить?

1 Ответ

9 голосов
/ 26 мая 2020

Подпись :(Bool :V(:$version)) не принимает аргументов, потому что аргумент version является необязательным, и он более специфичен c, чем подпись :(). Вы можете сделать аргумент version обязательным

multi MAIN (
    Bool :V( :$version )!
) {}
...