Как экспортировать% * SUB-MAIN-OPTS - PullRequest
0 голосов
/ 29 ноября 2018

Предполагается, что есть модуль, содержащий sub MAIN, который должен улучшить скорость запуска.К сожалению, я не могу использовать функцию named-anywhere таким образом.Мой экспорт поврежден или что я должен делать?

use v6.c;

unit module My::Main;
our %*SUB-MAIN-OPTS is export = ( 'named-anywhere' => True);

multi sub MAIN() is export {
    say 1;
}

multi sub MAIN('a', :$pa) is export {
    say $pa;
}

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Хотя вы, вероятно, можете экспортировать MAIN таким образом, вы должны учитывать область действия переменной %*SUB-MAIN-OPTS .Мне не ясно, устанавливаете ли вы значение в модуле, который импортирует, или в модуле экспорта.В любом случае, просто напечатайте значение в подпрограммах MAIN, чтобы проверить его.Я бы сказал, что в качестве динамической переменной вам нужно будет установить ее в импортирующем модуле.

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

В настоящее время вы не можете экспортировать динамические переменные таким образом, и, возможно, мы никогда этого не сделаем.

Тем временем, поскольку это обычно происходит в контексте сценариев командной строки, есть способ обойти это:

# in your module:
PROCESS::<%SUB-MAIN-OPTS><named-anywhere> = True;

# in your script
dd %*SUB-MAIN-OPTS'
# Hash element = ${:named-anywhere}

Что вы делаете, так это то, что вы устанавливаете ключ named-anywhere в хеше %SUB-MAIN-OPTS, который находится в пространстве имен PROCESS::.Это внешнее пространство имен, в котором ищутся динамические переменные, если их нельзя найти где-либо еще в стеке.Обратите внимание, что присвоение ключу named-anywhere фактически оживит хеш, если его еще не существует.Так что это не помешает любым другим будущим дополнениям к хэшу %SUB-MAIN-OPTS.

0 голосов
/ 30 ноября 2018

Как правило, я бы не помещал подпрограммы MAIN во внешний файл, но вместо этого имел бы скрипт, который ссылается на функции во внешнем файле.

...