gpt4 book ai didi

perl - 如何使用鼠标委托(delegate)数组的第一个元素?

转载 作者:行者123 更新时间:2023-12-02 08:03:34 25 4
gpt4 key购买 nike

我有一个包含一堆对象的对象。该对象委托(delegate)当前状态,堆栈中的每个对象都保存特定嵌套级别的状态。

package State;

use Mouse;
use RealState;

has state_stack => {
is => 'rw',
isa => 'ArrayRef[RealState]',
default => sub {
return [RealState->new]
}
};

我希望 State 委托(delegate)给 State->state_stack->[0]。我怎样才能用鼠标有效地做到这一点(所以没有元黑客攻击)。我无法使用驼鹿,my project不能有任何依赖项(我正在捆绑 Mouse::Tiny)。

“你不能”没关系,我会写一个AUTOLOAD

最佳答案

你不能直接这样做,但有一个比自动加载更好的技巧。也就是说,RealState->meta->get_all_method_names() 为您提供 RealState 中定义的方法名称。

#!perl
use 5.14.0;
package RealState {
use Mouse;

sub foo { 'foo' }
__PACKAGE__->meta->make_immutable;
}
package State {
use Mouse;

has stack => (
is => 'rw',
isa => 'ArrayRef',
default => sub { [ RealState->new ] },
);

# define delegates for stack->[0]
my $meta = __PACKAGE__->meta;
foreach my $name(RealState->meta->get_all_method_names) {
next if Mouse::Object->can($name); # avoid 'new', 'DESTROY', etc.

# say "delegate $name";
$meta->add_method($name => sub {
my $self = shift;
$self->stack->[0]->$name(@_);
});
}

$meta->make_immutable;
}

my $state = State->new();
say $state->foo();

关于perl - 如何使用鼠标委托(delegate)数组的第一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7989772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com