用一个例子更容易解释:
my $o = SpecialEffects->new( "config" => 'a' );
my $p = SpecialEffects->new( "config" => 'b' );
$o->sound(); # aliased to fizz(); same as $o->fizz()
$p->sound(); # aliased to clonk(); same as $p->clonk()
在 Perl 中可以做到这一点吗?也许使用一些 typeglob 或 coderef 技巧?
我试图保持SpecialEffects
界面简单。我不想开始构建对象层次结构。该sound()
方法是公开的,只有它的行为可以稍微配置。
我已经知道您可以使用别名,*sound = \&fizz;
但据我所知,这是一个全球性的事情,我希望它封装在对象中。