小编Tim*_*son的帖子

有谁知道为什么 TWEAK 例程在 BUILD 例程之前被命中?

最小代码:

 #!/usr/bin/raku

 class   Widget {
         submethod TWEAK(:$content, :$styles) {
                 say "t1\n";
         }
 }

 class   File is Widget {
         submethod BUILD() {
                 say "b1";
         }
 }

 my $xml = File.new();
Run Code Online (Sandbox Code Playgroud)

和输出:

 t1

 b1
Run Code Online (Sandbox Code Playgroud)

相关文档位于https://docs.raku.org/language/objects#Object_construction。我引用:“在调用 BUILD 方法之后,调用名为 TWEAK 的方法(如果存在),再次将所有命名参数传递给 new”。

我正在使用 Fedora 32 附带的 rakudo 版本(rakudo-0.2020.02-1.fc32.x86_64 所以可能是今年 2 月)。

construction object tweak rakudo raku

8
推荐指数
2
解决办法
116
查看次数

Cro 模板作为对象

场景

我一直在 Cro 中使用模板(记录在https://cro.services/docs/reference/cro-webapp-template),并且很喜欢其中的子项。

我目前有一个“主”模板和一些报告,例如报告 1、报告 2 和报告 3。

假设我想从report3 中包含report1 的数组。

现在,假设每个报告都有以下子项:

  • init:一些 Javascript 初始化代码(无论使用多少个报告实例,都应该只包含一次)

  • HTML:报告的每个实例应包含一些 HTML 代码(带有一些参数来区分它,但由于 Javascript 框架的限制,可能不包含任何<script><style>标签

  • data:每次包含报告时都必须重复的 Javascript 片段

目前,我将上述每个内容都放在模板的单独子目录中。

问题

Redeclaration of symbol '&__TEMPLATE_SUB__report-initial'.

问题

虽然我可以将报告名称(例如“report1”)传递给主模板,但我缺少的是一种让主模板调用已传入的报告名称上的子程序的方法,因为可能有多个涉及报道。

我尝试过的想法

理想的情况是,如果我能够以某种方式创建一个从模板继承的“报告”类,并将模板类的实例传递到主报告中,然后将子类作为报告类上的方法调用。但是,我一直无法找到一种方法来做到这一点。

我可以在这里看到三种可能的选择:

  • 我的困难可能是我没有想到“The Cro Way”。如果有更好的方法来实现我想要做的事情,请告诉我
  • 可能有一种方法可以实现我想要的,但我只是无法理解文档(或者可能丢失)
  • 虽然可能性不大,但 Cro 的设计可能并没有考虑到这种可能性。

任何人可以提供的任何帮助将不胜感激。

谢谢!

编辑:我认为一个可以有多个(命名的)“主体”的宏可以解决这个问题。

cro raku

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

Raku 最后在非循环上

我有一些可以在 Perl 中轻松完成的事情,但在 Raku 中却无法在不摆弄标志变量的情况下完成。这是 Perl 代码:

#!/usr/bin/perl

MAIN_BLOCK: {
        foreach $item (1 2 3 4 5) {
                $item == 6 and last MAIN_BLOCK;
        }
        print "No items matched!\n";
}
Run Code Online (Sandbox Code Playgroud)

这里的相关区别是 Perl 将允许您使用 last 退出任何标记块。仅当块是循环时,Raku 才会执行此操作。

有没有好的方法可以做到这一点?我觉得应该有一个移相器,但还没有弄清楚如何在没有标志变量的情况下做到这一点,这似乎是可以避免的。

谢谢,

block exit raku

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

标签 统计

raku ×3

block ×1

construction ×1

cro ×1

exit ×1

object ×1

rakudo ×1

tweak ×1