查看source for Int,我看到所有类都使用enum class Step : () -> Step {
Step1 {
override fun invoke() = Step2
},
Step2 {
override fun invoke() = End
},
End {
override fun invoke() = this
}
}
fun work() {
var step = Step.Step1
while (step !== Step.End) {
step = step()
}
}
声明,我原本认为这些类会将它们设为私有而在该文件之外不可用。但是,他们显然是。为什么他们需要这样宣布?
my
我认为BOOTSTRAP评论与它有关。在Perl6/Metamodel/BOOTSTRAP.nqp中有以下行:
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
答案 0 :(得分:7)
Rakudo的src/core/
目录中的文件不会编译为具有自己的专用文件级范围的单独模块,而是在构建过程中连接成单个文件,例如gen/moar/CORE.setting
。
从语义上讲,这种“设置”(在其他语言中称为“前奏”)构成了一个隐含在你的程序周围的外部词汇范围。
S02: Pseudo-packages中描述了该设计,该部分的部分已将其设为official documentation。