我正在编写一个用于创建具有自定义行为的枚举的模块。我现在要做的是将枚举添加到GLOBAL
包中,但是除非您在一个模块中创建枚举并将其从另一个模块导入,否则不会安装任何词法符号。不能选择使用BEGIN $*W.install_lexical_symbol(...)
,因为枚举的值可以从网络连接中获取,并且会阻塞编译,直到接收到这些值为止。在运行时是否可以在调用者的上下文中安装词汇符号?如果可以,怎么办?
答案 0 :(得分:6)
我要说出“不”。
(我通常会后悔使用P6这么做,但是嘿。)
我的主要证据是像"the set of symbols in a lexical scope is immutable after compile time"这样的评论。
也许拿一个生病的袋子,然后阅读How to define variable names dynamically in Perl 6?上的建议,这些建议既邪恶又不足够邪恶,无法满足我的要求。
呕吐完毕后,请密封袋子,然后前往the freenode IRC channel #perl6-dev,与胆量有关的真正专家将在这里闲逛。 (我想您知道这一点,但我想将其包括在此答案中以供后代使用,因为我似乎有一种不适的幽默感。)
答案 1 :(得分:1)
枚举有自己的metamodel。您可以使用它来声明具有新行为的新枚举。这有点棘手,但是肯定会创建您想要的词法范围内安装的东西。