懒惰地构建属性的最佳方法是什么?
class I { has $!cheezeburger; method cheezeburger { given $!cheezeburger { when .so {return $_} default { # build $cheezeburger,set attribute to it,return } } } }
这是很多cheezeburger.什么可能是一个不那么冗长的方式?
解决方法
如果未定义属性,Brad给出的实用解决方案应该足够好用于许多情况:
class Foo { has $!cheezeburger; method cheezeburger { $!cheezeburger //= do { ... } } }
另一种方法是使用do来通过在第一次调用期间混合角色来替换访问器方法,使用黑魔法(也称为NQP操作)来访问私有属性:
class Foo { has $!cheezeburger; method cheezeburger { self does role { method cheezeburger { use nqp; nqp::getattr(self,Foo,'$!cheezeburger'); } } $!cheezeburger = do { ... } } }