首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请有人解释一下如何在Moops中实现和利用私有范围的数组吗?

请有人解释一下如何在Moops中实现和利用私有范围的数组吗?
EN

Stack Overflow用户
提问于 2014-12-03 16:59:13
回答 1查看 116关注 0票数 1

我正在尝试学习Moops,但我不太了解如何在lexical_has arrayRefs上使用、填充和迭代。你能在这里用代码演示它们的用法吗?

我写了以下文章:

代码语言:javascript
复制
lexical_has people => (is => 'rw', 
                       isa => ArrayRef, 
                       default => sub { [] }, 
                       accessor => \(my @people), 
                       required => 0);

我试着把它塞进去:

代码语言:javascript
复制
$self->$people[$counter](Employee->new()->dispatch());

但它总是让我犯“语法错误近$people[]”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-03 22:07:37

您正在设置accessor => \@people,这显示了对lexical_has所做工作的根本误解。lexical_has在这个变量中安装一个代码,所以它应该是一个标量。

因此,一旦您将$people作为标量( lexical_has已经在其中安装了代码),那么$self->$people()$self->$people就是一个返回arrayref的方法调用。因此,push/pop/shift/unshift/grep/map/sort/foreach/etc.是(Non)数组本身,您可以将其用于@{ $self->$people }

简单的例子:

代码语言:javascript
复制
use Moops;

class GuestList {

  lexical_has people => (
    isa      => ArrayRef,
    default  => sub { [] },
    reader   => \(my $people),
    lazy     => 1,
  );

  method add_person (Str $name) {
    push @{ $self->$people }, $name;
  }

  method announce () {
    say for @{ $self->$people };
  }

}

my $list = GuestList->new;
$list->add_person("Alice");
$list->add_person("Bob");
$list->add_person("Carol");
$list->announce;

产出如下:

代码语言:javascript
复制
Alice
Bob
Carol

下面是使用people公共属性的等效代码..。

代码语言:javascript
复制
use Moops;

class GuestList {

  has people => (
    is       => 'ro',
    isa      => ArrayRef,
    default  => sub { [] },
    lazy     => 1,
  );

  method add_person (Str $name) {
    push @{ $self->people }, $name;
  }

  method announce () {
    say for @{ $self->people };
  }

}

my $list = GuestList->new;
$list->add_person("Alice");
$list->add_person("Bob");
$list->add_person("Carol");
$list->announce;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27277415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档