Вы можете использовать EVALFILE
(с некоторыми оговорками)
lib / example.pm6
say (^256).pick.fmt('%02X')
REPL
> EVALFILE('lib/example.pm6'); # rather than `use lib 'lib'; use example;`
DE
> EVALFILE('lib/example.pm6');
6F
Проблема возникает при попытке использовать пространство имен.
lib / example.pm6
class Foo {
say (^256).pick.fmt('%02X')
}
REPL
> EVALFILE('lib/example.pm6')
C0
> EVALFILE('lib/example.pm6')
===SORRY!=== Error while compiling /home/brad/EVAL_2
Redeclaration of symbol 'Foo'
at /home/brad/EVAL_2:1
------> class Foo⏏ {
expecting any of:
generic role
Это по-прежнему не работает, если вы изменяете часть имени :ver
между каждой загрузкой.
lib /example.pm6
class Foo:ver(0.001) {
say (^256).pick.fmt('%02X')
}
Один из способов обойти это, если вы только экспериментируете, - сделать их лексическими, а не глобальными.
lib / example.pm6
my class Foo { # default is `our`
say (^256).pick.fmt('%02X')
}
REPL
> EVALFILE('lib/test.pm6')
DD
> EVALFILE('lib/test.pm6')
88
> EVALFILE('lib/test.pm6')
6E
Он имеет отдельную лексическую область видимости:
> Foo
===SORRY!=== Error while compiling:
Undeclared name:
Foo used at line 1
Так что вы будетехочу присвоить ему псевдоним:
> my \Foo = EVALFILE('lib/test.pm6'); # store a ref to it in THIS lexical scope
0C
> Foo
(Foo)
> my \Foo = EVALFILE('lib/test.pm6'); # still works the second time
F7
Это, конечно, работает только потому, что определение класса является последним утверждением в этой области.
Может быть способ вызвать перезагрузку, аналогичнуюна то, как вы можете в Perl 5, если вы копаете в структуре Rakudo, но насколькоs Я знаю, что это не доступно как часть языка.