【发布时间】:2015-01-18 15:10:36
【问题描述】:
使用原型,您可以创建一个接受代码块作为其第一个参数的子例程:
sub example (&) {
my $code_ref = shift;
$code_ref->();
}
example { print "Hello\n" };
我怎样才能做同样的事情,但不止一个代码块?我想使用代码块,而不是变量或sub { ... }。
这不起作用:
sub example2 (&&) {
my $code_ref = shift;
my $code_ref2 = shift;
$code_ref->();
$code_ref2->();
}
example2 { print "One\n" } { print "Hello\n" };
它给出了这个错误:
Not enough arguments for main::example2
【问题讨论】:
-
你所说的“代码块”就是
sub { ... },只是你不用sub关键字 -
@TLP:你的意思是这样吗?
example2 sub { ... }, sub { ...};我意识到,我只想不使用sub关键字或变量。我猜这是做不到的。 -
这也是我的猜测。原型不容易使用,一般建议是:不要使用它们。我会冒险猜测它们没有得到很好的维护和/或开发,因为大多数 Perl 程序员认为它们是死胡同并且不使用它们。
-
就原型而言,(&) 和 (&@) 是无害的。
-
@Flimm:我们中的许多人都问过为什么,并且向您提供了几种可能有效也可能无效的解决方案。你不认为你欠我们一个为什么的答案吗?
标签: function perl parameter-passing subroutine