У меня есть куча тестов Perl 6, которые начинаются с некоторых базовых тестов, в которых я помещаю имя класса для тестирования в переменную и использую эту переменную на протяжении всего теста:
my $package = 'Some::Class';
use-ok $package;
my $class = ::($package);
can-ok $class, 'new';
Я некоторое время не обращал на это внимания, но это больше не работает, потому что классы теперь загружаются лексически:
Нет такого символа 'Some :: Class'
Это не сложное решение. Загрузите модуль без use-ok
и в области, где я хочу ::($package)
:
use Some::Class;
...
Другие решения (возможно, за исключением уродливого EVAL
) имеют проблему, которую я пытаюсь избежать.
Но мне это не особенно нравится, так как имя дважды появляется в файле. Мне особенно понравилась моя раньше работавшая идиома, которую я перенес из Perl 5. Если я хотел изменить имя класса, оно появлялось в файле только один раз. Я мог легко генерировать стандартные тесты (хотя исправить это не так уж сложно).
Есть ли способ вернуться к тому идеалу, которого я хотел? (Хотя я полагаю, что лексическая загрузка в следующей версии снова будет мешать).
constant pkg = 'Test'; use ::(pkg);
. Это то, что вы ищете? - person Jarrod Funnell   schedule 02.04.2017