2011-01-17 5 views
1

Während GUI-Programmierung (in Perl), habe ich oft den Fall, wo ich ein Hauptpaket/Funktion x, die ein Paket/Funktion y ruft, die wiederum Paket/Funktion z. Aber wenn ich eine Variable in x habe (z. B. eine Referenz auf ein Widget), auf die ich in z zugreifen muss, muss ich sie dann durch y übergeben, weil ich keine Globals verwenden möchte.Wie kann ich vermeiden, Variablen durch mehrere Funktionen zu übergeben?

Gibt es einen besseren Weg, dies zu tun? Wenn mein Programm größer wird, scheint es, dass mehr und mehr Variablen Pakete/Funktionen durchlaufen, so dass ich auf sie in Unterpaketen/Funktionen zugreifen kann.

+0

Ich denke, du willst Globals vermeiden. – ijw

+0

Danke. Ich habe den Satz so geändert, dass er jetzt lautet: "Ich möchte keine Globals verwenden", was ich meinte. – Lozzer

Antwort

3

Sie scheinen zu denken, dass dies ein Fehler ist. Es ist ein Feature! Das heißt, wenn Sie in Monaten oder Jahren zum Programm zurückkehren, wissen Sie, wie und wo Ihre Daten verwendet werden.

Beachten Sie, dass es nicht im Allgemeinen leer Informationen ist eine Variable a durch y passieren zu z zu erhalten. Der Grund dafür ist, dass y stattdessen möglicherweise eine eigene Version von a generiert; von x oder z allein zu sehen wäre nicht in der Lage, mit globalen Variablen zu sagen. Wenn Sie es durch y übergeben, wissen Sie zumindest, dass y mit etwas beginnt, das von x erzeugt wird.

Beachten Sie, dass Sie auch feststellen könnte, dass Sie Ihren Code Refactoring benötigen:

x produces a 
x calls y with a 
    y produces b 
    y calls z with a and b 

könnte

x produces a 
x calls y 
    y produces and returns b 
x calls z with a and b 

in einigen Fällen geändert werden.

+0

Danke für die klare Antwort. Ich sehe den Punkt darüber, dass es keine leeren Informationen sind. – Lozzer