Thread Übergabe einer sort-Funktion an eine Methode: Problem beim Zugriff auf $a und $b (23 answers)
Opened by docsnyder at 2006-01-19 11:16

docsnyder
 2006-01-19 15:44
#62065 #62065
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also gut, auf daß das mit Cut&Paste gutgeht.

File myClass.pm:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/perl

package myClass;

use strict;
use warnings;
use vars qw($VERSION);
$VERSION = '0.01';

#----------------------------- new() -----------------------------------------#
sub new {
my($class) = shift;
my($name) = shift;
my($self) = {};

$self->{childs} = [];
$self->{name} = $name;
$self->{parent} = undef;

return(bless($self, $class));
}

#---------------------------- sort() -----------------------------------------#
sub sort {
my($self, $sortFunc) = @_;
my($nodeObj);
my(@tmpArr);

if ( scalar(@tmpArr=$self->childList()) ) {
if ( $sortFunc ) {
@tmpArr = sort $sortFunc @tmpArr;
}
else {
@tmpArr = sort(@tmpArr);
}

$self->{childs} = \@tmpArr;

for $nodeObj ( @tmpArr ) {
$nodeObj->sort($sortFunc);
}
}
}

#----------------------------- name() ----------------------------------------#
sub name {
my($self) = @_;

return($self->{name});
}

#----------------------------- childList() -----------------------------------#
sub childList {
my($self) = @_;

if ( defined($self->{childs}) ) {
return(@{$self->{childs}});
}
else {
return(());
}
}

#----------------------------- addChild() ------------------------------------#
sub addChild {
my($self, $childObj, $idx) = @_;

if ( ($idx == -1) || ($idx >= scalar(@{$self->{childs}})) ) {
push(@{$self->{childs}}, $childObj);
}
else {
my(@tmpArr) = @{$self->{childs}};
@tmpArr = ( @tmpArr[0..($idx-1)], $childObj, @tmpArr[$idx..(scalar(@tmpArr)-1)] );
$self->{childs} = \@tmpArr;
}

$childObj->{parent} = $self;
}

1;


File myClass.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/perl

use myClass;

@childObjs = ();

#---------------------------- sortNodes() ------------------------------------#
sub sortNodes {
printf("REF: %s / %s\n", ref($_[0]), ref($_[1]));
# $_[0]->name() cmp $_[1]->name();
# $a->name() cmp $b->name();
1
}

#--- CREATING TREE OBJECT ----------------------------------------------------#
$treeObj = new myClass("ROOT");

#--- CREATING CHILDS ! -------------------------------------------------------#
for ( $idx=0; $idx<5; $idx++ ) {
push(@childObjs, new myClass("CHILD_$idx"));
}

#--- ADD CHILDS ! ------------------------------------------------------------#
$treeObj->addChild($childObjs[0], -1);
$treeObj->addChild($childObjs[1], -1);
$childObjs[1]->addChild($childObjs[2], -1);
$treeObj->addChild($childObjs[3], 1);
$childObjs[1]->addChild($childObjs[4], -1);

#--- sort tree ! -------------------------------------------------------------#
$treeObj->sort(\&sortNodes);


Wär echt nett, wenn Du's Dir mal anschauen könntest.

Gruß, Doc

View full thread Übergabe einer sort-Funktion an eine Methode: Problem beim Zugriff auf $a und $b