繁体   English   中英

Perl 中是否有任何类指针可以访问成员变量和函数?

[英]Is there any class pointers in Perl in order to access member variables and functions?

我希望在 Perl 中构建一个 Node 类(使用关键字“包”),但我不确定如何像在 C++ 中一样创建指向类变量的指针。

在 C++ 中,你有:

class Node
{
public:
    int key;
    Node* left;
    Node* right;

    Node(int _key)
    {
        key = _key;
        left = NULL;
        right = NULL;
    }
};

在 Perl 中:

package Node;
sub Node
{
    my $class = shift;

    my $key;
    Node* left;        # Of course, this will not work
    Node* right;
}

有什么办法可以在 Perl 中创建一个指向类变量的指针吗? 或者,如果不可能,对可以做我想做的事情的 Perl 模块有什么建议吗?

package Node;

use strict;
use warnings qw( all );

use Carp qw( croak );

sub new  {
   my ($class, %args) = @_;

   croak("key is required") if !exists($args{key});

   my $self = bless({}, $class);

   $self->{ key   } = $args{ key   };
   $self->{ left  } = $args{ left  };
   $self->{ right } = $args{ right };

   return $self;
}

sub key   { my $self = shift; $self->{ key   } = shift if @_; $self->{ key   } }
sub left  { my $self = shift; $self->{ left  } = shift if @_; $self->{ left  } }
sub right { my $self = shift; $self->{ right } = shift if @_; $self->{ right } }

1;

或者

package Node;

use strict;
use warnings qw( all );

use Moo;

use namespace::clean;

has key   => ( is => 'rw', required => 1 );
has left  => ( is => 'rw' );
has right => ( is => 'rw' );

1;

用法:

my $node = Node->new(
   key   => $key,
   left  => $left,    # Optional. Defaults to undef.
   right => $right,   # Optional. Defaults to undef.
);

实际上,如果您想在 Perl 中使用 OOP,您应该查看现有的框架,如Moose或使用bless自己完成。 一个例子:

package Node;

sub new {
  my ($class, $key) = @_;
  bless { key => $key }, $class;
}

my $node = Node->new();

稍后,您可以通过添加到节点引用到哈希里面添加“指针”的“对象” node

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM