想象一下这个子程序:
sub test(&&)
{
my $cr1 = shift;
my $cr2 = shift;
$cr1->();
$cr2->();
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以称之为:test(\&sub1,\&sub2),但我怎么称它为:
test { print 1 },{ print 2 };
Run Code Online (Sandbox Code Playgroud)
如果我说子程序只需要一个&,那么发送一个块就行了.我不知道如何让它与2一起工作.
如果我尝试像那样运行它,我得到:
Not enough arguments for main::test at script.pl line 38, near "},"
Run Code Online (Sandbox Code Playgroud)
编辑:没有办法没有调用sub?
yst*_*sth 12
你需要明确说出来
test( sub { print 1 }, sub { print 2 } );
Run Code Online (Sandbox Code Playgroud)
要么
test { print 1 } sub { print 2 };
Run Code Online (Sandbox Code Playgroud)
隐含的"sub"仅适用于第一个参数. http://perldoc.perl.org/perlsub.html#Prototypes:
一个&需要一个匿名子例程,如果作为第一个参数传递,则不需要sub关键字或后续逗号.
有些东西在那里使用额外的词来伪造它:
test { print 1 } against { print 2 };
sub against (&) { $_[0] }
sub test (&@) { ... }
Run Code Online (Sandbox Code Playgroud)
但我从来没有那么喜欢过.
你可以这样做:
test(sub { print 1 }, sub { print 2 });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |