perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 23
Click for quality!




11.02.2012 / 20:14

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragProblem mit verschachtelten Funktionen
Seitenanfang
Hallo zusammen,

ich hoffe, dass mir einer von Euch bei folgendem Problem behilflich sein kann, da ich auch nach Tagen und endlosem Google'n keine Lösung gefunden habe.

Ich habe in Perl eine Klasse A implementiert, die neben 'new' eine Methode 'initWith' implementiert. Innerhalb von initWith erzeuge ich eine Instanz einer anderen Klasse, die zur Verarbeitung benutzerdefinierte Funktionen aufruft. Diese benutzerdefinierten Funktionen habe ich als lokale Funktionen innerhalb er Methode 'initWith' implementiert,da sie Werte liefern, die in Instanzvariablen von Objekten der Klasse A gespeichert werden sollen.

Im Pseudocode sieht das ungefähr so aus:

package A;

use strict;
use ...;

...

sub new
{
my $class = shift;
my $self = {};

$self->{VALUE1} = undef;
$self->{VALUE2} = undef;
$self->{VALUE3} = undef;

bless($self, $class);

return $self;
}

sub initWithXML
{
my $self = shift;
my $anObject;

my $handler1 = sub
{
my ($var1, $var2) = @_;

$self->{VALUE1} = $var2->giveMeAValue();
$self->{VALUE2} = $var2->anotherValue();
...
};

my $handler2 = sub
{
my ($var1, $var2) = @_;

$self->{VALUE3} = $var2->aThirdValue();

print $self->{VALUE1};
...
};

my $Handler = {'Key1' => \&{$handler1},
'Key2' => \&{$handler2}};

anObject = SomeClass->new(WithHandler => $Han

Datum: 24.11.2005-14:58

Beitragre: Problem mit verschachtelten Funktionen
Seitenanfang
Hallo nochmal,

ich glaube, so sieht es besser aus:


package A;

use strict;
use ...;

...

sub new
{
my $class = shift;
my $self = {};

$self->{VALUE1} = undef;
$self->{VALUE2} = undef;
$self->{VALUE3} = undef;

bless($self, $class);

return $self;
}

sub initWithXML
{
my $self = shift;
my $anObject;

my $handler1 = sub
{
my ($var1, $var2) = @_;

$self->{VALUE1} = $var2->giveMeAValue();
$self->{VALUE2} = $var2->anotherValue();
...
};

my $handler2 = sub
{
my ($var1, $var2) = @_;

$self->{VALUE3} = $var2->aThirdValue();

print $self->{VALUE1};
...
};

my $Handler = {'Key1' => \&{$handler1},
'Key2' => \&{$handler2}};

anObject = SomeClass->new(WithHandler => $Handler);

anObject -> operate();

Da ich innerhalb der Handler auf $self zugreifen muss, um über die Handler gelieferte Werte in die Instanzvariablen zu transferieren, habe ich die Handler lokal zur Methode initWith erklärt.

Passieren tut nun folgendes: Bei Aufruf des 1. Handlers funktioniert alles wie gedacht. Aber beim Aufruf des 2. Handlers scheint $self nicht mehr innerhalb des Handler bekannt zu sein. Es ist insbesondere nicht möglich, auf Werte über die Hash-Keys zuzugreifen, d.h.

 $self->{VALUE1} 
liefert
undef 
anstatt des über Handler1 zuvor zugewiesenen Wertes.

Hat jemand eine Idee, wie ich das Problem in den Griff bekommen kann?

Vielen Dank

Werner

Datum: 24.11.2005-15:09

Beitragre: Problem mit verschachtelten Funktionen
Seitenanfang
Wie sieht denn der Code aus der deine Klassenfunktionen aufruft?

Datum: 26.11.2005-13:20

-






-
-