如何在Perl中传递实例方法?

时间:2011-07-25 03:28:48

标签: perl

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,以便bb 1}} goto的{​​{1}}

好像直接调用a,以便堆栈不会累积。

如何在Perl中完成这类工作?

2 个答案:

答案 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个子试图找出调用者想要做什么,然后调用正确的代码传递的参数。