Raku 从类外部更改类变量

Raku 从类外部更改类变量,raku,meta-object-protocol,Raku,Meta Object Protocol,最后,当我,也就是如何更改内部动态变量的值时,代码已经向前移动,现在是: my int$is-win=Rakudo::Internals.is-win; 这是在class Encoding::Builtin中声明的类变量。这在世界上是有意义的,因为操作系统不是在变量的生命周期内改变的东西。但是,我需要从其他操作系统测试这段代码,因此我需要访问该类变量并为其分配一个True值。我可以使用吗?Perl 6中不存在“类变量”的概念 正在考虑的声明是一个词法变量,它的生存期绑定到它在其中声明的范围(

最后,当我,也就是如何更改内部动态变量的值时,代码已经向前移动,现在是:

my int$is-win=Rakudo::Internals.is-win;
这是在
class Encoding::Builtin
中声明的类变量。这在世界上是有意义的,因为操作系统不是在变量的生命周期内改变的东西。但是,我需要从其他操作系统测试这段代码,因此我需要访问该类变量并为其分配一个
True
值。我可以使用吗?

Perl 6中不存在“类变量”的概念

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

除了在调试器下之外,访问词法的唯一方法是该词法范围内的某些内容显式地使之成为可能(例如,通过获取一个伪包并将其存储在更广泛可见的位置,或者通过允许对提供的代码进行
EVAL
)。这两种情况都不会发生,因此无法访问变量


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

与其尝试使用内部语言,不如使用稍微慢一点的,但是更一致的
$*发行版是win
?您应该能够轻松地动态覆盖哪些内容?@ElizabethMattijsen在这种情况下,我不能。事实上,这就是我在乐古多开业的原因。