gpt4 book ai didi

perl - 当从 Perl 模块调用方法时,为什么 '::' 和 '->' 可以互换工作(某种程度上)?

转载 作者:行者123 更新时间:2023-12-04 05:04:15 24 4
gpt4 key购买 nike

我不断收到::-> 混淆从模块调用子程序时。我知道::与路径和模块/子程序所在的位置和 -> 更相关用于对象,但我真的不明白为什么我似乎可以互换两者并且不会立即出现错误。
我有 perl 模块,它们是更大包的一部分,例如FullProgram::Part1
我只是要掌握模块,但在涉及 Perl 对象时仍然处于不稳定的状态,但我一直不小心这样做:

FullProgram::Part1::subroutine1();

代替
FullProgram::Part1->subroutine1();

因此,当我将哈希引用传递给 subroutine1 并小心使用 $class/$self 时处理对象引用并意外使用 ::我最终把头发拉了出来,想知道为什么我的哈希引用似乎消失了。我已经吸取了教训,但真的很想解释一下差异。我已经阅读了这些 perldocs 和各种网站,但我没有看到两者之间的任何比较(很难用谷歌搜索......)
感谢所有帮助 - 总是很高兴了解我在做什么!

最佳答案

vanilla sub和一个方法之间没有内在的区别。这一切都在你如何称呼它。

Class::foo('a');

这将调用 Class::foo .如果 Class::foo不存在,继承树将不会被检查。 Class::foo将仅传递提供的参数( 'a' )。

大致相当于: my $sub = \&Class::foo; $sub->('a');
Class->foo('a');

这将调用 Class::foo , 或 foo如果 Class::foo 在其基类之一中不存在。调用者( -> 左侧的内容)将作为参数传递。

大致相当于: my $sub = Class->can('foo'); $sub->('Class', 'a');

关于perl - 当从 Perl 模块调用方法时,为什么 '::' 和 '->' 可以互换工作(某种程度上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13479246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com