sub method_of_class_A {
B->new(back => a_specific_method_of_class_A)->run;
}
我想将当前A
实例a
的{{1}}传递给a_specific_method_of_class_A
的实例B
,以便b
能b
1}} goto
的{{1}}
好像直接调用a
,以便堆栈不会累积。
如何在Perl中完成这类工作?
答案 0 :(得分:3)
使用can
方法。
答案 1 :(得分:1)
如果你问我认为你在问什么,你可能需要通过一个闭包:
sub method_of_class_A {
my $self = shift;
return B->new(
back => sub { $self->a_specific_method_of_class_A(); }
)->run;
}
我认为这就是你需要的,因为你似乎没有将$a
的实例传递给B.
如果您需要这么多,可以将其指定为对象中的字段:
back => $self->{invoke_method_closure}
||= sub { $self->a_specific_method_of_class_A(); }
我不确定这些想法中的任何一个如何帮助“堆栈不会积累”的标准,因为我不确定这个标准需要什么。 goto
调用只会避免将 1 级别添加到堆栈中。但是,如果你看一下这个街区,你会看到你要去的地方。并且您将跳转到以正常方式调用该方法的指令。所以无论如何都要使用你“保存”的等级。
goto
最好不要尝试过早地优化方法调用,而是将堆栈传递给另一个具有一些包装行为的处理程序。所以它在委托import
基本行为的Exporter
方法中运行得很好,或者AUTOLOAD
个子试图找出调用者想要做什么,然后调用正确的代码传递的参数。