我正在寻找类似于Java的解决方案,我可以创建具有相同名称但具有不同参数列表的方法。
e.g。
method makeDeposit() {
system("cls");
print "How much money do you want to deposit?: ";
chomp (my $amount = <STDIN>);
$self->insufficientFunds(0);
$self->balance($self->balance() + $amount);
$self->performBalanceInquiry();
return;
}
method makeDeposit(Int $amount) {
$self->insufficientFunds(0);
$self->balance($self->balance() + $amount);
$self->performBalanceInquiry();
return;
}
谢谢!
答案 0 :(得分:7)
Perl是一种相当松散的类型语言,方法签名中的(伪)类型名称只是动态输入验证代码的简写。
然而,在CPAN的无限之地,有一个模块MooseX::MultiMethods
,它可以让你做你想做的事情 - 但你必须在方法前加上multi
关键字。
E.g。
multi method makeDeposit() { ... }
multi method makeDeposit(Int $amount) { ... }
答案 1 :(得分:4)
您可以通过检查@_
sub makeDeposit {
my $amount;
if (@_) {
($amount) = @_;
} else {
system("cls");
print "How much money do you want to deposit?: ";
chomp($amount = <STDIN>);
}
$self->insufficientFunds(0);
$self->balance($self->balance() + $amount);
$self->performBalanceInquiry();
}
通常情况下,检查参数是否已定义更为简单。
sub makeDeposit {
my ($amount) = @_;
if (!defined($amount)) {
system("cls");
print "How much money do you want to deposit?: ";
chomp($amount = <STDIN>);
}
$self->insufficientFunds(0);
$self->balance($self->balance() + $amount);
$self->performBalanceInquiry();
}
请注意,您的示例显示了不适当的关注点划分。不同的模块应该处理IO和帐户。