perl – 如何在Moose强制中访问我的对象的属性?

perl – 如何在Moose强制中访问我的对象的属性?,第1张

概述我想将一个Str强制转换为我的Moose类中的属性的DBIx :: Class :: Row对象.为此,我需要在DBIC模式上执行查找以查找行.如果查找失败,我想将错误推送到ArrayRef属性. 我目前将模式作为属性传递给我的类. 有了强制,我似乎无法访问该对象,因此我无法推送错误的arrayref属性或使用模式对象来执行查找. 我尝试的另一种方法是使用’around’来查找并设置属性,但是当通 我想将一个Str强制转换为我的Moose类中的属性的DBIx :: Class :: Row对象.为此,我需要在DBIC模式上执行查找以查找行.如果查找失败,我想将错误推送到ArrayRef属性.

我目前将模式作为属性传递给我的类.

有了强制,我似乎无法访问该对象,因此我无法推送错误的arrayref属性或使用模式对象来执行查找.

我尝试的另一种方法是使用’around’来查找并设置属性,但是当通过构造函数传递属性值时,这当然不会被调用.

这是可能的,还是有人有替代实现来做我想要实现的目标?

解决方法 当传递给具有属性初始值设定项的构造函数时,您可以捕获并改变存储的值. (但是,它仅在构造函数中设置属性时运行,而不是在任何其他时间运行.)初始值设定项的文档可在 Class::MOP::Attribute中找到.

由于这只捕获通过构造函数设置属性的情况,因此您仍然需要捕获设置该属性的其他情况.这可以通过你所说的方法修饰符来完成,但你可以将这两个方法组合成一个方法,包裹在自动生成的访问器中:

has my_attr => (    is => 'rw',isa => 'DBIx::Class::Row',initializer => 'my_attr',);# my_attr is the autogenerated accessor - we method-modify it to mutate the# value being set,and catch cases where it is called as an initializer.# called for reads,writes,and on initialization at construction timearound 'my_attr' => sub {    my $orig = shift;    my $self = shift;    # value is not defined if being called as a reader    # setter and attr are only defined if being called as an initializer    my ($value,$setter,$attr) = @_;    # the reader behaves normally    return $self->$orig if not @_;    # convert the string to the row object    my $row = $self->convert_str_to_row_obj($value);    # if called as an initializer,set the value and we're done    return $setter->($row) if $setter;    # otherwise,call the real writer with the new value    $self->$orig($row);};
总结

以上是内存溢出为你收集整理的perl – 如何在Moose强制中访问我的对象的属性?全部内容,希望文章能够帮你解决perl – 如何在Moose强制中访问我的对象的属性?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1239273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存