小编Tak*_*kao的帖子

如何让Perl 6级决赛?

例如,我有这样的代码:

class Foo {}
class Bar is Foo {}
Run Code Online (Sandbox Code Playgroud)

虽然这个行动的用处是有争议的,但是有可能禁止继承Foo吗?

perl6

7
推荐指数
1
解决办法
135
查看次数

是否可以使编译时代码不缓存在Perl 6中?

假设我想在编译时创建许多类型,但是在此之前,让我们用一个更简单的示例测试编译时代码:

# in file root.pm6
sub foo($a) { $a.say }

sub EXPORT {
    # Things here may be a lot more complex
    foo 1;
    foo 2;
    foo 1;
    %( one => 1 )
}
Run Code Online (Sandbox Code Playgroud)

以及直接原始库和最终用户文件之间的模块:

# in file middle.pm6
use root;
class A {} # Do something with stuff from root.pm6
Run Code Online (Sandbox Code Playgroud)

最终用户文件:

# in file user.pm6
use middle;
Run Code Online (Sandbox Code Playgroud)

然后在命令行中:

?  tester perl6 -I. user.pm6
1
2
Run Code Online (Sandbox Code Playgroud)

似乎第三次调用foo已被缓存,并且没有第三次执行。

这种行为使得sub EXPORT(以及在其他编译时区域)进行任何相对复杂的计算(基于代码重用)成为不可能。

根据我的理解,编译时代码应正常执行,其结果(例如某些声明,调整等)可由其他模块从编译单元访问。但是,也涉及某种缓存。

问题最终是具有可能里程碑的“如何实现我想要的”:

1)是否打算使用这种缓存?

2)如果是,可以在具有编译时代码执行优势的同时将其禁用吗?如果没有,还有其他解决方法吗?

更新1:更具体地解释我想要的事情:在编译时,我正在解析配置文件并创建要导出的类型。我希望这些是预先编译的,这就是重点。类型可以嵌套,并且可能有各种情况,因此我将过渡状态机模拟作为带有长given-where语句的简单子例程来实现,某些分支是递归的(底部始终存在)。我坚持的问题是,一旦触发一次,某些分支将无法执行,这使我能够打入 …

perl6

5
推荐指数
1
解决办法
196
查看次数

在正则表达式上调用Bool无法正常工作

根据文档,类的Bool方法Regex...

与调用者的$ _变量匹配,对于匹配项返回True,对于不匹配项返回False。

但是,在这个例子中

$_ = "3";
my regex decimal { \d };
say &decimal.Bool;
Run Code Online (Sandbox Code Playgroud)

返回False。另外,查看源代码,它说的还算合理,因为它将匹配$!topic实例变量。但是,尚不清楚此变量将有效地对应于$ _,并且上面的示例似乎是这样说的。任何实际发生的想法?

regex oop perl6

5
推荐指数
1
解决办法
88
查看次数

标签 统计

perl6 ×3

oop ×1

regex ×1