如何在Perl中将函数a
传递给函数b
并使b
调用a
?传递函数对象并调用它
24
A
回答
37
下面是一个完整的工作脚本,演示您所要求的内容。
sub a { print "Hello World!\n"; }
sub b {
my $func = $_[0];
$func->();
}
b(\&a);
这里有一个解释:你把一个基准说\&a
运作a
。那时你有一个函数引用;虽然通常可以通过称为func()
来调用函数,但您称$func->()
->
语法也可以处理其他参考。例如,这里是处理数组和散列引用的例子:
sub f {
my ($aref, $href) = @_;
print "Here's an array reference: $aref->[0]\n"; # prints 5
print "Here's a hash ref: $href->{hello}\n"; # prints "world"
}
my @a = (5, 6, 7);
my %h = (hello=>"world", goodbye=>"girl");
f(\@a, \%h);
4
您可以访问子程序引用和Perl一样\&my_method
,并呼吁与$myref->();
这些引用。试试这个:
perl -e'sub a { print "foo in a"; }; sub b { shift->(); }; b(\&a);'
祝你好运!
+0
如果我通过函数作为哈希的一部分,那么它会是这样吗?的$ args {函数} - >(); – Kys 2009-08-05 18:23:59
2
继达礼Courtwright的例子:如果你只使用第一个函数一次,你也可以打电话b
与匿名函数,像这样:
b(sub { print "Hello World\n"; });
5
你不能传递一个函数到另一个函数直。相反,您将一个参考传递给一个函数。要调用该函数,请使用->()
对其进行解引用(作为CODE ref);
sub a { print @_ }
sub b {
my $f = shift; # assuming that $f is a function reference...
$f->(@_); # call it with the remaining arguments
}
b(\&a, "hello, world!"); # prints "hello, world!"
Perl没有名称传递的语义,但可以使用散列来模拟它们。调用函数的方法是相同的。你取消引用它。
sub a { print @_ }
sub b {
my %arg = @_;
$arg{function}->(@{$arg{arguments}});
}
b(function => \&a, arguments => ["hello, world!"]);
ObPerl6:Perl 6将具有通过名称的语义。
相关问题
- 1. 调用函数,并将它传递一个JSON对象
- 2. 我怎样才能调用JavaScript函数,并传递到它行的对象?
- 3. javascript + asp.net - 从c#调用javascript函数并传递一个对象
- 4. 如何传递jquery对象并在函数中调用$(this)?
- 5. Python:传递函数并递归调用
- 6. 将对象传递给函数调用中的函数
- 7. 调用从PairRDD管(),并传递一个Java对象到它
- 8. 传递参数的函数,并通过调用它的“&”
- 9. C++将函数名称传递给宏并调用它
- 10. 调用函数,并传递给它的结构
- 11. 将方法传递到泛型函数并调用它
- 12. 如何将linc传递给类函数并调用它?
- 13. 递归调用setTimeout函数并传递一个匿名函数
- 14. 如何函数对象传递给函数回调C++
- 15. 将对象引用传递给函数
- 16. 传递对象的JavaScript函数引用
- 17. 使用JavaScript调用函数时,以及何时传递对象?
- 18. 什么是函数中更快的传递对象或静态调用它
- 19. 将数组转换为对象并调用它的函数
- 20. 验证,并把它传递给函数
- 21. JAVA:调用未知对象类方法并传递它的参数
- 22. 将对象函数传递给对象构造函数
- 23. 从AS3中传递对象调用JS函数
- 24. 问题与目标C传递对象到JavaScript函数调用
- 25. 如何传递对象的动态创建函数调用
- 26. 重复调用函数而不覆盖传递的对象
- 27. 如何将接口对象传递给Pascal Script函数调用?
- 28. 检索从调用函数传递的对象的ID
- 29. 如何调用通过interop传递的对象的函数?
- 30. 传递一个可调用对象的成员函数
如果我将该函数作为散列的一部分传递,那么它会是这样吗? $ args {function} - >(); – Kys 2009-08-05 18:15:13
我已经添加了数组和散列引用的示例。但是,如果 – 2009-08-05 18:26:55
它是这样的: F(功能=> \ &func); 然后在函数f,那会是这个 副反馈{ 的$ args {功能} - >(); } – Kys 2009-08-05 18:44:12