是否通过require解决了循环依赖?

时间:2014-11-23 19:48:28

标签: perl module dependencies package circular-dependency

我注意到我的2个模块中存在循环依赖。所以我做了以下事情:

package A::B::ModuleA;  

sub foo {
  my ($class, $params) = @_;  
  # some processing  
  require A::C::ModuleB;  
  my $mb = A::C::ModuleB->new();  
  $mb->bar($params);  
  # some other processing  
}  

1;  

package A::C::ModuleB;  

sub process {  
  my ($class, $input) = @_;  
  # Some processing  
  require A::B::ModuleA;
  my $ma = A::B::ModuleA;
  $ma->submit($input);   
  # some other processing
}
1;

所以我的问题是,如果我通过函数内部的require解决循环依赖问题的方式解决了任何可能是这种依赖的结果的问题。

1 个答案:

答案 0 :(得分:2)

对于纯面向对象的代码,没有循环依赖问题。你可以非常高兴地拥有类似的东西:

# AAAA.pm
package AAAA;
use strict;
use warnings;
use BBBB;
sub new {
    my $class = shift;
    my ($i) = @_;
    bless {
        b => $i > 0 ? BBBB->new($i-1) : $i
    }, $class;
}
1;

# BBBB.pm
package BBBB;
use strict;
use warnings;
use AAAA;
sub new {
    my $class = shift;
    my ($i) = @_;
    bless {
        a => $i > 0 ? AAAA->new($i-1) : $i
    }, $class;
}
1;

# script.pl
use strict;
use warnings;
use AAAA;
use Data::Dumper;
print Dumper( AAAA->new(4) );

如果您需要在编译时对模块执行某些操作,则循环依赖性只会成为问题。出口商是最常见的例子。