【发布时间】:2013-10-01 06:25:47
【问题描述】:
我有一个调度表,我希望只初始化一次,并且只打算由一个函数使用。我希望将调度表移到子例程之外并移到同一个匿名块中,但是由于调度表使用闭包来调用传递给函数的对象的方法,因此将表移到函数之外会将其与对对象的访问分开.对于这个调度表,我还有哪些其他选择?
我使用的是 Perl 5.8,所以很遗憾我无法使用 state 变量。
sub foo {
my ($self, $var) = @_;
my %funcs = (
a => sub { $self->_a() },
b => sub { $self->_b() },
...
);
return $funcs{$var}->();
}
【问题讨论】:
-
我在示例中看到的唯一闭包是在匿名潜艇中的
$self之上——真实代码中还有其他闭包吗?如果是这样,请添加一个示例。