【问题标题】:Moose - Determine if Lazy Attribute has been setMoose - 确定是否设置了惰性属性
【发布时间】:2014-03-07 18:08:04
【问题描述】:

我正在尝试找出一种方法来查看我的一个懒惰构建的属性是否已设置。我搜索了 Moose::Meta::AttributeClass::MOP::Attribute 的文档,并看到了 get_valuehas_value 方法,但它们似乎对我不起作用。

get_value 的文档说:

$attr->has_value($instance)

但是 $instance 是什么?我尝试使用我的对象,但这只是返回错误:

“你必须传递一个包名,它不能被祝福..”

感谢任何帮助!

【问题讨论】:

  • $instance 应该是您的对象。如果不查看更多代码,很难知道自己做错了什么。
  • 感谢您的澄清。使用我的对象作为 $instance 实际上确实有效,它只是在 100% 的时间内返回真实。但这似乎是一个不同的问题,所以我将在另一个问题中问它。

标签: perl moose


【解决方案1】:

你可能想要的是一个关于你的属性的谓词。例如

has foo => (
  is        => 'rw',
  lazy      => 1,
  predicate => 'has_foo',
);

【讨论】:

  • 这是我的数据库交互代码,所以我希望能有更多的包罗万象(为每个惰性属性设置谓词是不幸的......)但因为这是最好的回答我提出的问题,谢谢你,我会接受的。
  • 你可能想看看 MooseX::AttributeShortcuts,特别是 'is => "rwp"'、'is => "lazy"' 和 'predicate => 1' 选项。 .YMMV.
猜你喜欢
  • 2020-01-01
  • 2011-03-06
  • 2010-11-19
  • 2012-02-21
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
相关资源
最近更新 更多