从 class 外部更改 class 变量

Changing a class variable from outside the class

最后,当我managed to understand how to fix this, that is, how to change the value of an internal dynamic variable, the code has moved on and now it is declared in this way

my int $is-win = Rakudo::Internals.IS-WIN;

这是在 class Encoding::Builtin 中声明的 class 变量。这在世界上都很有意义,因为 OS 在变量的生命周期内不会发生变化。但是,我需要从其他 OS 测试此代码,因此我需要访问该 class 变量并为其分配一个 True 值。我可以使用 meta object protocol 吗?

"class variable" 的概念在 Perl 6 中不存在。

正在考虑的声明是一个词法变量,它的生命周期被绑定到它声明的范围(由花括号限定)。它与正在声明的 class 没有任何关系,因此无法通过 MOP 访问它。 (就词法变量而言,这个问题中的块恰好附加到 class 声明是偶然的。)它也没有声明 our,所以它也没有存储在包中。

词法可以被访问的唯一方法——除了在调试器下——是如果词法范围内的某些东西明确地使它成为可能(例如,通过获取一个伪包并将它存储在更广泛可见的地方,或者允许 EVAL 提供的代码)。在这种情况下都不会发生,因此无法访问变量。

Perl 6 对词法范围界定非常严格,这是语言设计中非常有意的部分。它支持用户理解和重构程序,支持编译器分析和优化程序。换句话说,Perl 6 在词法方面是一种相当静态的语言(并且可能会在未来的语言版本中进行更多的静态分析),而在对象方面则是一种动态语言。