Rob*_*t P 2 perl reference callback package
在Perl中,如果其包已知,则指定回调或代码引用是非常简单的:
package Foo;
sub foo { print "in foo" }
# and then
package main;
sub baz {
my $code = shift;
$code->();
}
baz( \&Foo::foo );
Run Code Online (Sandbox Code Playgroud)
这打印in foo.
让我们说你有一个对象,如此琐碎,像这样:
package Foo;
sub new { bless {}, shift }
sub bar { print "in bar" }
sub baz { print "in baz" }
Run Code Online (Sandbox Code Playgroud)
你可以使用上面的方法查找方法(\&Package:Method)并调用它
package main;
my $foo = Foo->new();
my $ref = \&Foo::bar;
$foo->$ref();
Run Code Online (Sandbox Code Playgroud)
但有时(好吧,经常)你不知道明确的类型.比方说有Foo,Bar,Baz,,他们都有自己的blat方法.您希望基于对象而不是包来获取对适当方法的引用.你会怎么做?
my $ref = $obj->can('blat');
Run Code Online (Sandbox Code Playgroud)
如果$ ref是undef,你的对象就不能反对.如果$ ref不是undef,它是对有问题的函数的有效CODE引用,适用于调用"$ obj - > $ ref(@args)".
| 归档时间: |
|
| 查看次数: |
305 次 |
| 最近记录: |