【发布时间】:2023-03-22 15:49:01
【问题描述】:
我想调用一个动态调度其他函数的主控制器函数,如下所示:
package Controller;
my %callback_funcs = ();
sub register_callback{
my ($class,$callback,$options) = _@;
#apppend to %callback_funcs hash ... ?
}
sub main{
%callback_funcs = ( add => 'add_func', rem => 'remove_func', edit => 'edit_func');
while(<STDIN>){
last if ($_ =~ /^\s*$/);
if($_ == 'add' || _$ == 'rem' || _$ == 'edit'){
$result = ${callback_funcs['add']['func']}(callback_funcs['add']['options']);
}
}
}
sub add_func{
...
}
需要注意的是,subs 是在其他模块中定义的,因此回调必须能够引用它们......加上 我很难得到正确的哈希值!
【问题讨论】:
-
第一件事:
use strict和use warnings。 -
callback_funcs是一个散列,但callback_funcs['add']['func']看起来不像散列查找。缺少印记,并且使用了错误的括号。 -
$_ == 'add'执行数值比较。'add'并没有真正产生数字。这是马车。你想要$_ eq 'add'。 -
如果你想要更多,看看 Higher order perl.. 免费在线:hop.perl.plover.com/book 刚开始,看起来不错。
标签: perl function hash callback dynamic-function