我正在尝试在Perl中使用命名参数。我一直在使用http://perldesignpatterns.com/?NamedArguments作为参考。
似乎有道理。但是,我似乎无法真正获得发送的值。
我已尝试更改为$args{'name'}
,$args{"name"}
,但没有运气。我似乎无法获得传入的值。我需要找出哪个方向来弄清楚究竟发生了什么?
package doh;
sub new ()
{
my %args = @_;
$name = $args{name};
print $name;
}
1;
__END__
use warnings;
use doh;
$trial = doh::;
$trial->new(name => "Tyson");
运行test.pl时不会输出任何输出。
答案 0 :(得分:9)
我不确定你要对$trial = doh::;
做什么,但你的主要问题是你在处理你的方法调用之前试图处理参数。
首先,使用
启动每个Perl文件use strict;
use warnings;
是的,你需要两者。
在Perl中调用方法时(与普通子程序相反),->
运算符左侧的东西( invocant )被推到参数的开头名单。所以你需要先从列表中删除它。对于构造函数方法,invocant通常是类名。对于实例方法,它将是对象本身。所以
sub new {
my $class = shift;
my %args = @_;
print "name is: $args{name}\n";
}
(如果您不想使用shift
,您也可以只写my ( $class, %args ) = @_;
)
对于实例方法,约定是将变量命名为$self
。
另请注意我在子程序名称后删除了parens;这些对OO方法没有任何作用,无论如何它们可能都没有你想的那样。