올바른 순서로 테스트의 회귀를 시작할 수 있도록 의존성을 결정하는 창의적인 방법을 찾으려고합니다. 예를 들어Perl 종속성 트리 솔버
:이 테스트 "a"는 등 테스트 "D, E 및 F"및 종료에 따라 의미
a: d, e, f
b: c, d
c: f
d: e
.
나는 "leaf"노드 "e"와 "f"를 인쇄 할 다음 코드를 가지고 있지만, 부모 노드를 가로 지르고 인쇄하는 방법을 고수 할 것입니다. 모든 팁은 크게 감사하겠습니다.
감사합니다.
my @input = ("a:d,e,f", "b:c,d", "c:f", "d:e");
my %Tests =();
my %Built =();
## Build Structure
foreach my $elem (@input) {
my $depends = [];
my $target;
($target,$depends) = parseData($elem);
$Tests{$target} = $depends; ## Setting array ref to hashkey $target
}
sub parseData {
my $data = shift;
my ($target, $deps) = split(/:/, $data);
my @deps;
@deps = split(/,/, $deps);
return ($target,\@deps);
}
foreach my $key (keys %Tests) {
doIT(\%Tests, \%Built, $key);
}
sub doIT {
my ($testRef, $builtRef, $target) = @_;
my $depends = $testRef->{$target};
if(exists $builtRef->{$target}) {
return;
}
if(!$depends) {
## No dependency, build it
print "RunTest($target)\n";
$builtRef->{$target}++;
return;
}
foreach my $dep (@$depends) {
doIT($testRef, $builtRef, $dep);
}
}
이것은 깔끔한 방법입니다! 나는 다음 행이 무엇을하는지 이해하지 못한다 : $ children {$ _} || = {}. 이게 실제로 무엇을하는지 자세히 설명해 주시겠습니까? 감사! – user3528108
'% children'은 해시 구조의 해시에서 상위 관계를 보유합니다. '$ children {$ a_parent} {$ a_child} = 1'입니다. 'e'와'f'와 같은 일부 요소는 자식이 없으므로 자식을 볼 때마다 구조체를 초기화합니다. 데이터 구조의 형식을 보려면'Data :: Dump; dd \ %를 사용하십시오. 아이들,''for '루프가 끝난 후 – Miller
설명해 주셔서 감사합니다. – user3528108