3

最后,当我设法理解如何解决这个问题,即如何更改内部动态变量的值时,代码继续前进,现在以这种方式声明

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

这是一个在内部声明的类变量class Encoding::Builtin。在世界上一切都有意义,因为操作系统不是在变量的生命周期内发生变化的东西。但是,我需要从其他操作系统测试此代码,因此我需要访问该类变量并为其分配一个True值。我可以使用元对象协议来做到这一点吗?

4

1 回答 1

12

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

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

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

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

于 2018-08-07T21:41:19.180 回答