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