perl - 如何使用Moose为数组属性添加便捷功能?

标签 perl moose

我担心这是一个基本问题。看看下面的代码。我想知道是否有一种方法可以声明 slices 属性,以避免使用 get_slicesadd_slice 的样板文件.

package Gurke;
use Moose;

has slices => is => 'rw', isa => 'ArrayRef[Str]', default => sub { [] };

sub get_slices { return @{ $_[0]->slices } }

sub add_slice {
    my( $self, $slice ) = @_;
    push @{ $self->slices }, $slice;
    return;
}

no Moose;
__PACKAGE__->meta->make_immutable;

package main; # now a small test for the above package
use strict;
use warnings;
use Test::More;
my $gu = Gurke->new;
$gu->add_slice( 'eins' );
$gu->add_slice( 'zwei' );
$gu->add_slice( 'drei' );
my @sl = $gu->get_slices;
is shift @sl, 'eins';
is shift @sl, 'zwei';
is shift @sl, 'drei';
done_testing;

谢谢!

最佳答案

我是 Moose 初学者,但我认为你需要这个:

has slices =>
    is => 'rw',
    isa => 'ArrayRef[Str]',
    default => sub { [] },
    traits  => ['Array'],
    handles => {
        add_slice  => 'push',
        get_slices => 'elements',
    },
;

关于perl - 如何使用Moose为数组属性添加便捷功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816927/

相关文章:

perl - 在 Perl 中拦截不存在的方法调用

perl - 如何将字符串化版本的数组引用转换为 Perl 中的实际数组引用?

perl - 为什么 Moose 的构建器采用字符串值?

perl - 如何覆盖 Moose::Role 中的 sub?

perl - 我应该先学习 Perl 5 OO 还是 Moose?

perl - 如何在导出器模块中实现 "use 5.010"?

perl - 用 bash sed 或脚本语言(TCL、perl)替换文件中的字符串

perl - 如何将数组和散列数据类型传递给 perl 中的子例程参数?

perl - Moose OOP 还是标准 Perl?

perl - 使用子驼鹿对象重载驼鹿对象,使其成为常规数据类型结构