很抱歉打扰社区,但遗憾的是我在Perl中编写代码:'(.这是关于我想要了解的OO perl代码,但我没有将所有部分放在一起.
以下是代码模板,它代表了我目前正在看的内容.以下是MyClass类:
package Namespace::MyClass;
sub new($)
{
my ($class) = @_;
$self = { };
bless ($self, $class);
}
sub init($$)
{
my ($self, $param1) = @_;
$self->{whatever} = ($param1, $param1, $param1);
}
Run Code Online (Sandbox Code Playgroud)
然后以下是一个应该使用该类的script.pl:
#!/path/to/your/perl
require Namespace::MyClass;
my myClass = new Namespace::MyClass()
myClass->init("data_for_param1");
Run Code Online (Sandbox Code Playgroud)
可能有错误但我更感兴趣的是回答了以下问题而不是纠正了我可能错误的代码:
我问这个是因为我在非祝福模块中看到一个$ =一个参数.
感谢您的时间.
原型(如"$")在Method调用中完全没有任何意义.
最有经验的Perl民众完全避免使用原型,除非他们试图模仿内置功能.一些没有Perl经验的PHB强制要求他们使用它们的错误观念,即它们就像其他语言的原型一样.
Method调用的第一个参数是调用Method的Object(Blessed Ref)或Class Name(String).对于你的new方法,它将是'Namespace :: MyClass'.
明智的话: 也避免间接方法调用. 使用直接方法调用重写您的行,如下所示:my $myClass = Namespace::MyClass->new;
你的init方法是$myClass第一个参数,因为它是所谓的"方法".第二个参数来自参数列表.祝福将类的名称绑定到引用,以便在看到方法调用时,它知道在哪个类中开始搜索正确的sub.如果sub未立即找到正确的内容,则会在类的@ISA数组中指定的类中继续搜索.