加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 06:20:13 所属栏目:大数据 来源:网络整理
导读:我是面向对象Perl的新手,我必须在同一个对象的另一个子程序中访问同一个对象的成员变量.示例代码在这里: use Class::Struct;struct Breed ={ name = '$',cross = '$',};struct Cat =[ name = '$',kittens = '@',markings = '%',breed = 'Breed',breed2 = '$
我是面向对象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";

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读