为什么Rakudo的src/core/Int.pm里的类都用my声明了?
Why are all of the classes in Rakudo's src/core/Int.pm declared with my?
查看 source for Int,我发现所有 类 都是用 my
声明的,我原以为这会使它们成为私有的并且在该文件之外不可用。但是,他们显然是。为什么需要这样声明?
my class Rat { ... }
my class X::Numeric::DivideByZero { ... }
my class X::NYI::BigInt { ... }
my class Int { ... }
my subset UInt of Int where {not .defined or $_ >= 0};
my class Int does Real { # declared in BOOTSTRAP
我认为 BOOTSTRAP 评论与此有关。在 Perl6/Metamodel/BOOTSTRAP.nqp 中有这样的行:
my stub Int metaclass Perl6::Metamodel::ClassHOW { ... };
Rakudo 的 src/core/
目录中的文件没有编译为具有自己私有文件级范围的单独模块,而是在构建过程中连接成单个文件,例如 gen/moar/CORE.setting
。
从语义上讲,这个 'setting'(在其他语言中称为 'prelude')形成了隐式围绕您的程序的外部词法范围。
S02: Pseudo-packages, and parts of that section have made it into the official documentation中描述了设计。
查看 source for Int,我发现所有 类 都是用 my
声明的,我原以为这会使它们成为私有的并且在该文件之外不可用。但是,他们显然是。为什么需要这样声明?
my class Rat { ... }
my class X::Numeric::DivideByZero { ... }
my class X::NYI::BigInt { ... }
my class Int { ... }
my subset UInt of Int where {not .defined or $_ >= 0};
my class Int does Real { # declared in BOOTSTRAP
我认为 BOOTSTRAP 评论与此有关。在 Perl6/Metamodel/BOOTSTRAP.nqp 中有这样的行:
my stub Int metaclass Perl6::Metamodel::ClassHOW { ... };
Rakudo 的 src/core/
目录中的文件没有编译为具有自己私有文件级范围的单独模块,而是在构建过程中连接成单个文件,例如 gen/moar/CORE.setting
。
从语义上讲,这个 'setting'(在其他语言中称为 'prelude')形成了隐式围绕您的程序的外部词法范围。
S02: Pseudo-packages, and parts of that section have made it into the official documentation中描述了设计。