U. *_*ndl 1 methods perl closures reference
在处理各种参数获取和设置的网络处理程序中,我大量使用闭包。我有一个子例程,它接收一个闭包,并使用返回时作为参数传递的闭包构建另一个闭包(听起来很复杂,但这就是我想要这样的原因)。现在我有一个情况,我必须传递两个非常相似的闭包,每个闭包使用相同的对象方法,但具有不同的参数(对象方法检查传递的参数数量)。
我的想法是不传递两个(或更多)类似的闭包,而是传递$meth_ref对对象方法的引用(该对象也传递给返回闭包的函数),以便函数可以使用代码引用来传递不同的参数。
不幸的是我没有找到这样做的语法。
代码草图:
sub closure_maker($$)
{
my ($obj, $meth_ref) = @_;
return sub (...) {
$meth_ref->($obj);
...
$meth_ref->($obj, ...);
};
}
my @handlers = (closure_maker($obj1, ???), closure_maker($obj2, ???));
Run Code Online (Sandbox Code Playgroud)
我希望你能明白。
使用$obj->$method_name()。
sub closure_maker($$)
{
my ($obj, $method_name) = @_;
return sub {
$obj->$method_name();
...
$obj->$method_name(...);
};
}
my @handlers = map { closure_maker($_, "method_name") } $obj1, $obj2;
Run Code Online (Sandbox Code Playgroud)
您可以使用$obj->can来获取对该方法的引用。
sub closure_maker($$)
{
my ($obj, $method_name) = @_;
my $method_ref = $obj->can($method_name);
return sub {
$obj->$method_ref();
...
$obj->$method_ref(...);
};
}
Run Code Online (Sandbox Code Playgroud)