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

当从Perl模块调用方法时,为什么’::’和’ – >’可互换地工

发布时间:2020-12-15 21:41:33 所属栏目:大数据 来源:网络整理
导读:我一直在::与 – 混淆 – 从模块调用子程序时.我知道::与路径和模块/子程序的位置更相关,而且 – 用于对象,但我真的不明白为什么我看似可以互换它并没有立即出现错误. 我有perl模块,它们是更大包装的一部分,例如FullProgram ::第一部分 我只是想要掌握模块,
我一直在::与 – 混淆 – >从模块调用子程序时.我知道::与路径和模块/子程序的位置更相关,而且 – >用于对象,但我真的不明白为什么我看似可以互换它并没有立即出现错误.
我有perl模块,它们是更大包装的一部分,例如FullProgram ::第一部分

我只是想要掌握模块,但是当谈到Perl对象时,我仍处于不稳定状态,但我不小心这样做了:

FullProgram::Part1::subroutine1();

代替

FullProgram::Part1->subroutine1();

所以,当我将散列引用传递给子程序1时,一直小心使用$class / $self来处理对象引用并意外地使用::我最后拉出我的头发,想知道为什么我的哈希引用似乎消失了.我已经吸取了教训,但我真的想解释一下这种差异.我已经阅读了perldocs和各种网站,但我没有看到两者之间的任何比较(相当难以谷歌…)
所有的帮助表示赞赏 – 总是很了解我在做什么!

解决方法

FullProgram::Part1::subroutine1();

使用空参数列表调用包FullProgram :: Part1的子例程子例程1

FullProgram::Part1->subroutine1();

使用包名称作为第一个参数调用相同的子例程(请注意,当您进行子类化时,它会变得更复杂一些).这种语法由构造函数方法使用,这些方法需要类名来构建子类的对象,如

sub new {
    my ($class,@args) = @_;
    ...
    return bless $thing,$class;
}

仅供参考:在Perl OO中,您会看到$object->方法(@args),它使用对象(一个有福的引用)作为第一个参数而不是包/类名来调用Class ::方法.在这样的方法中,子例程可以这样工作:

sub method {
    my ($self,$foo,$bar) = @_;
    $self->do_something_with($bar);
    # ...
}

这将调用子例程do_something_with,并将对象作为第一个参数再次跟随$bar的值,这是您最初传递给@args中的方法的第二个列表元素.这样对象本身就不会丢失.

有关在调用方法时继承树如何变得重要的更多信息,请参阅ikegami’s answer!

(编辑:李大同)

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

    推荐文章
      热点阅读