我想用Class属性和构建器定义Role。无论我尝试过什么,这都失败了。我找到了两个解决方法:
这是一个最小的例子:
"5+4"
结果:
first_num_str,second_num_str = pair1.split("+")
first_num = int(first_num_str)
second_num = int(second_num_str)
result = first_num + second_num
print(str(result))
更新:我通过添加' lazy =>解决方法1&#39 ;.然后它完美地运作。如果没有' lazy',可能会在角色完全导入之前调用构建器。
答案 0 :(得分:1)
在此上下文中使用lazy
并不是解决方法,而是正确的解决方案。 MooseX::ClassAttribute
实施为Moose::Role
。在MyRole
完全合并到Appli
之前,Perl会调用class_has
,它会尝试将_build_value
作为Appli
类的方法调用。由于该方法尚未组成Appli
,MooseX::ClassAttribute
因上述错误而死亡。使用lazy
推迟对_build_value
的评估,直到MyRole
完全合并到Appli
。