我是面向对象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";