【发布时间】:2011-05-12 15:48:50
【问题描述】:
我在 Moose 对象中有一堆惰性特性。
有些建造者需要一些时间才能完成。
我想调用所有的构建器(转储“bomplete”对象)。 我可以一次构建所有惰性功能,还是必须手动调用每个功能以使其构建器运行?
【问题讨论】:
-
你不应该使用
default吗?我认为lazy的目的是将创建属性值推迟到第一次使用。如果您需要在对象构造时设置所有属性,default似乎更有用。或者,您可以提供自己的BUILD方法。 -
这是一个相当普遍的成语,有一些正当的理由。
-
基本上,您可以在
BUILD中完成所有工作,但最好为每个属性设置一个方法。而且,如果您要为每个属性使用一个方法来计算值,那么它也可能是一个构建器。但是,如果构建器要访问其他属性,则构建的属性需要惰性以确保它们已被初始化。并且没有“懒惰,但只有 一点点 懒惰”属性选项 :) -
FWIW,这已经在#moose 上出现过几次,并且提出了一个新的 MX 模块来处理这个问题,有点类似于 MooseX::LazyRequire。它将允许标记属性“这是懒惰的,因为它依赖于要构建的其他属性值,但我希望它在构建完成之前被戳。”