在某些地方`require`不起作用的原因可能是什么?

sid*_*com 7 require perl6

在分配的一个模块中加载ABC带有require工程的模块(),而在分配的另一个模块中加载失败。还有什么是负载的原因ABCrequire失败,在一个地方?

require Name::ABC;
my $new = Name::ABC.new(); # dies: You cannot create an instance of this type (ABC)
Run Code Online (Sandbox Code Playgroud)
perl6 -v
This is Rakudo Star version 2019.03.1 built on MoarVM version 2019.03
implementing Perl 6.d.
Run Code Online (Sandbox Code Playgroud)

所需的模块:App :: DBBrowser :: Subqueries

App :: DBBrowser :: Union,行80:确定*

App :: DBBrowser :: Join,第66和191行:确定*

App :: DBBrowser :: Table :: Extensions,第49行:确定*

App :: DBBrowser,第690行:您无法创建此类型的实例(子查询)*

App :: DBBrowser :: CreateTable,第112行:您无法创建此类型的实例(子查询)*

*版本 0.0.1

uge*_*exe 6

$ cat XXX.pm6
unit class XXX;

$ cat ZZZ.pm6
module ZZZ {
    require XXX;
    XXX.new;
    say "OK";
}

$ perl6 -I. -e 'use ZZZ;'
===SORRY!===
You cannot create an instance of this type (XXX)
Run Code Online (Sandbox Code Playgroud)

文档中

require在运行时加载compunit并导入确定的符号。

您正在执行模块的运行时加载,同时还希望该模块的符号在编译时存在。相反,您应该使用间接名称查找(如先前链接的文档页面底部所示):

$ cat XXX.pm6
unit class XXX;

$ cat ZZZ.pm6
module ZZZ {
    require XXX;
    ::("XXX").new;
    say "OK";
}

$ perl6 -I. -e 'use ZZZ;'
OK
Run Code Online (Sandbox Code Playgroud)


Sci*_*mon 5

我认为这是因为require是运行时负载,而使用是编译时。

通常,use除非需要在运行时动态加载模块,否则我会使用。