Thread OOP: mit Arrays arbeiten (10 answers)
Opened by Hagen at 2007-09-06 23:50

Linuxer
 2007-09-07 00:17
#99165 #99165
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

was du technisch machen willst, wird mir klar, aber welche Logik dahinter steckt, warum Du das machen willst, bleibt mir verschlossen.

Wenn die erste Sub der Konstruktor ist, kannst Du den Array selber als Objekt verwenden...

Code (perl): (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
#!/usr/bin/perl
# vi:ts=4 sw=4 et:

package ups;
use strict;
use warnings;

sub new {
  my $class = shift;
  my %parms = @_;
  my $self = []; # array-ref

  push @$self, qw( abc def 123 456 );

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

sub print_content {
  my $self = shift;
  my @args = @_;
 
  for ( @$self ) {
    print $_, $/;
  }
}

package main;

my $a = ups->new();

$a->print_content();


Das Problem ist, dass der Gültigkeitsraum des Arrays @daten bei Deinem Beispiel auf den Block der Subroutine beschränkt bleibt.

Wenn Du die Daten nicht im eigentlichen Objekt speichern willst/kannst, könntest Du noch mit einem Closure arbeiten.
Aber das ist schon stärkerer Tobak, von daher würde ich dazu raten, die Daten im Objekt unterzubringen, wie pktm schon aufzeigte....

Code (perl): (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
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

package ups;

{  ### CLOSURE
    my @daten = (); # @daten ist nur in den Methoden bekannt, die 
                           # in diesem Block definiert werden.

    sub fill_data {
        @daten = qw( a b c 12 3 );
    }

    sub print_data {
        for ( @daten ) {
            print $_, $/;
        }
    }
}

sub new {
    my $class = shift;
    my %parms = @_;
    my $self = {};

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

package main;

my $obj = ups->new();

$obj->fill_data();
$obj->print_data();
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread OOP: mit Arrays arbeiten