Perl OO方法调用第一个参数值( - >)

evo*_*ion 2 perl

就Perl OO而言,具体到底是做->什么的?

例如,我打电话给主:

$result = a::b->mymethod( );
Run Code Online (Sandbox Code Playgroud)

在我定义的包中mymethod(),我使用以下内容:

    my( $class ) = @_;
Run Code Online (Sandbox Code Playgroud)

在主要方面,我显然没有传递任何参数mymethod(),所以$class参数来自何处?有没有人对此有一个很好的解释或解释这个的文件?

Gre*_*con 8

perlobj文档"方法调用"部分解释了.更重要的是我的.

方法调用

出于各种历史和其他原因,Perl提供了两种编写方法调用的方法.更简单和更常见的方法是使用箭头符号:

my $fred = Critter->find("Fred");
$fred->display("Height", "Weight");
Run Code Online (Sandbox Code Playgroud)

您应该已经熟悉->运算符与引用的使用.实际上,由于$fred上面是对象的引用,因此您可以将方法调用视为另一种解除引用形式.

无论是箭头的左侧,无论是引用还是类名,都将作为第一个参数传递给方法子例程.所以上面的代码大致相当于:

my $fred = Critter::find("Critter", "Fred");
Critter::display($fred, "Height", "Weight");
Run Code Online (Sandbox Code Playgroud)

Perl如何知道子程序所在的包?通过查看箭头的左侧,它必须是包名称或对象的引用,已经祝福包裹的东西.无论哪种方式,这都是Perl开始寻找的包.如果该包没有具有该名称的子例程,则Perl开始在该包的任何基类中查找它,依此类推.