raku - 我可以转发声明以后要定义的Perl 6类吗?

是否可以在不插入名称的情况下向前声明要加载并稍后使用的类?我正在尝试这样的事情:

my class Digest::MD5 {};
require ::('Digest::MD5');
put Digest::MD.new.md5_hex("My awesome data to hash");

我知道我可以通过插值来做到这一点,但我希望跳过这一步:
require ::('Digest::MD5');
put ::('Digest::MD5').new.md5_hex("My awesome data to hash");

我以为我在某些核心类(class)中已经看到过类似的内容,但也许他们还在继续学习。

最佳答案

拆分问题:

  • 我可以转发声明一个类吗?

    ,但实现必须在同一源文件中。
    (Rakudo源文件在编译之前已加入到同一文件中)
    毕竟,它必须知道您要声明的哪个类具有相同的短名称。

    class Foo {...}
    class Foo {
    }
    
  • 是否可以延迟加载类,而无需使用::('Digest::MD5')来访问它?

    ,从require返回的值是该类

    put (require Digest::MD5).new.md5_hex("My awesome data to hash");
    

    或者您可以使用以下方法:

    sub term:<Digest::MD5> () { once require Digest::MD5 }
    
    put Digest::MD5.new.md5_hex("My awesome data to hash");