我可以转发声明我将在后面定义的Perl 6类吗?

时间:2018-02-21 05:57:26

标签: perl6

我可以转发声明一个我想要加载的类,并在以后使用而不插入其名称吗?我正在尝试这样的事情:

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");

我以为我在某些核心课程中看到过这样的东西,但也许他们还有额外的东西。

1 个答案:

答案 0 :(得分:9)

分裂问题:

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

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

    class Foo {...}
    class Foo {
    }
    
  2. 是否可以延迟加载某个类而无需使用::('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");