Moose ArrayRef 属性作为数组返回

发布于 2024-08-14 01:03:42 字数 160 浏览 8 评论 0原文

我有一个 Moose 类,其属性是 ArrayRef (只读),并由对象在内部进行操作。但是当有人调用访问器方法时,我希望它返回一个数组(或列表)而不是引用。这不仅会减少类的用户必须执行的取消引用量,而且意味着他们不会意外地篡改我的对象正在使用的相同引用。

那么最好的方法是什么?某种强制?

I have a Moose class with an attribute that is an ArrayRef (read-only) and is manipulated internally by the object. But when someone calls the accessor method I want it to return an Array (or list) not a reference. Not only would this cut down on the amount of dereferencing that the user of the class has to do, but it will mean they can't accidentally tamper with the same ref that my object is using.

So what's the best way to do this? Some sort of coercion?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

琴流音 2024-08-21 01:03:42

使用 Moose::Meta::Attribute:: Native::Trait::Array 和委托,例如

handles => { my_array => 'elements' }

(通过 #moose 上的 doy)

auto_deref 具有不良行为,如果您在标量上下文中调用访问器,仍然返回引用。

Use Moose::Meta::Attribute::Native::Trait::Array and delegation, e.g.

handles => { my_array => 'elements' }

(via doy on #moose)

auto_deref has the undesirable behavior of still returning a reference if you call the accessor in scalar context.

秋风の叶未落 2024-08-21 01:03:42

虽然您可以使用auto-deref,但Moose::Manual::BestPractices 表示这不是最好的方法,您应该考虑使用 Moose::Meta::Attribute::Native 来完成该功能。

While you can use auto-deref, Moose::Manual::BestPractices says that this isn't the best way to do it, and that you should instead consider using Moose::Meta::Attribute::Native to accomplish that functionality.

绝情姑娘 2024-08-21 01:03:42

使用 auto_deref 选项:

has my_field => (
    is => 'ro', isa => 'ArrayRef[Str]',
    auto_deref => 1,
    # rest of options...
);

请注意,有时您不会使用 reader 方法时返回一个数组,具体取决于表达式的标量或列表上下文。不久前,我遇到了一种情况,我必须显式地将数组上下文引入表达式才能使取消引用起作用。如果我能找到它,我将添加一个示例。

Use the auto_deref option:

has my_field => (
    is => 'ro', isa => 'ArrayRef[Str]',
    auto_deref => 1,
    # rest of options...
);

Note that sometimes you won't get an array back when using the reader method, depending on the scalar or list context of the expression. A while ago I ran into a situation where I had to explicitly bring array context to the expression in order to get the dereferencing to work.. I'll add an example if I can find it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文