在使用Perl的Class :: Struct构建对象时,如何引用该对象?

前端之家收集整理的这篇文章主要介绍了在使用Perl的Class :: Struct构建对象时,如何引用该对象?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是面向对象Perl的新手,我必须在同一个对象的另一个子程序中访问同一个对象的成员变量.示例代码在这里:

use Class::Struct;

struct Breed =>
{
    name  => '$',cross => '$',};

struct Cat =>
[
    name     => '$',kittens  => '@',markings => '%',breed    => 'Breed',breed2 => '$',];

my $cat = Cat->new( name     => 'Socks',kittens  => ['Monica','Kenneth'],markings => { socks=>1,blaze=>"white" },breed    => { name=>'short-hair',cross=>1 },** //breed2 => sub { return $cat->breed->name;}**

                  );

print "Once a cat called ",$cat->name,"\n";
**print "(which was a ",$cat->breed->name,")\n";**
print "had two kittens: ",join(' and ',@{$cat->kittens}),"\n";

但我不知道如何在breed2的子程序中使用$cat-> breed->名称?有人可以帮我弄这个吗.

解决方法

品种2中的问题是您正在尝试引用尚未定义的变量.它看起来是相同的名称,但它不是您正在创建的对象.这有点像鸡蛋问题.

我不太确定你想要一个像那个插槽那样的匿名子程序.你是
只是想把$cat-> breed->名称缩短为$cat-> breed2?您可以从breed2中的undef开始,并在构造函数之后立即更改其值,因为您将获得对该对象的引用.但是,即使你在那里放了一个子程序,你也必须取消引用它:

my $cat = Cat->new( name     => 'Socks',breed2   => undef,);
$cat->breed2( sub { $cat->breed->name } );

print "Once a cat called ","\n";
print "(which was a ",$cat->breed2->(),")\n";
print "had two kittens: ","\n";

猜你在找的Perl相关文章