我是否可以转发声明一个我想要加载的类,并在以后使用而不插入其名称?我正在尝试这样的事情:
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");
我以为我在某些核心课程中看到过这样的东西,但也许他们还有额外的东西在继续.
解决方法
分裂问题:
>我可以转发申报课程吗?
是的但是实现必须在同一个源文件中.
(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");