Schrift
[thread]12140[/thread]

Zugriff auf Objekt-Attribut aus privater Methode

Tags: Ähnliche Threads

Leser: 1


<< >> 3 Einträge, 1 Seite
darkwave
 2008-07-07 11:52
#111901 #111901
User since
2008-07-07
2 Artikel
BenutzerIn
[default_avatar]
Hallo erst mal.

Ich hoffe jemand von euch kann mir helfen.
Ich habe folgende klasse:

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
package Synchronizer;
use strict;
use File::Find;

#constructor
sub new {
my ($class) = @_;
my $self = {
_myattribut => "",
};
bless $self, $class;
return $self;
}

# Private Methode. (in Objekt (find) selbst aufgerufen)
sub _privmethode{
ref(my $class = shift);
my $myattribut = $class->{_myattribut};
print $myattribut;
....
}

sub synchronize{
my $mref = $self->can('_privmethode');
my $rfolder = "c:\";
find ($mref, $rfolder);
....
}


Folgendes (sollte) passiert:
Ich mache ein Objekt und rufe synchronize() auf. Nun wird find aufgerufen, welches wiederum _privmethode aufruft für jede Datei welche in c:\ ist.
In _privmethode möchte ich auf das Objekt-Attribut $myattribut zugreifen. Dies klappt jedoch nicht.
Folgende Fehlermeldung erscheind beim print: "Use of uninitialized value $myattribut in concatenation (.).."

Das Problem ist folgendes: mit $self->can('_privmethode') bekomme ich zwar die Referenz auf _privmethode, jedoch nicht zu welchem Objekt diese Methode gehört. Somit ruft find() einfach die Methode auf, übergibt ihr aber nicht zu welchem Objekt sie gehört und ref(my $class = shift)liefert nichts zurück...;

Meine Frage nun: wie kann ich von dieser Methode (_privmethode), welche im Objekt selbst aufgerufen wird, auf das Objekt-Attribut (_myattribut) zugreifen?
moritz
 2008-07-07 11:58
#111902 #111902
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Du kannst das Problem lösen, indem du eine find() eine Closure übergibst:

Code (perl): (dl )
1
2
3
4
5
sub synchronize {
    my $self = shift;
    ...
    find(sub { $self->_privmethode(@_ }, $rfolder);
}
darkwave
 2008-07-07 13:31
#111903 #111903
User since
2008-07-07
2 Artikel
BenutzerIn
[default_avatar]
genau das habe ich gesucht.

besten dank, funktioniert prima!
<< >> 3 Einträge, 1 Seite



View all threads created 2008-07-07 11:52.