2016-08-06 33 views
0

Ich brauche einen Parameter test innerhalb process_data und schalten Fälle außerhalb dieser Funktion in Abhängigkeit von test Wert mit dem Namen zu ändern.Wie wird durch Verweis auf eine Funktion übergeben, die keine neuen Argumente akzeptiert?

Ich konnte es nicht per Referenz unter Verwendung upvar übergeben, weil die process_data eine statische Funktion für die Verarbeitung von empfangenen UDP-Paket darstellen, und es nicht mehr als zwei Parameter 'Größe und Daten akzeptieren'.
Auch soweit ich gefunden, gibt es keinen Rückgabewert für die process_data Funktion.

Code:

set test "0" 

Agent/UDP instproc process_data {size data} { 
    //some stuff 
    if (...) 
     set test "1" 
} 

// switch cases depending on test value. 

Antwort

1

Sie benötigen kein zusätzliches Argument benötigen upvar zu verwenden, wenn Sie den Namen der Variablen kennen, die Sie alias gehen. Sie sollten entweder von diesen zu tun (do nicht Gebrauch beide) in der Lage sein:

global test 
upvar #0 test test 

Es ist nicht wirklich klassische modulare Programmierung, aber es wird funktionieren.

Ein guter Ort, um den Befehl zu setzen ist zu Beginn des Verfahrens Körper, etwa so:

Agent/UDP instproc process_data {size data} { 
    global test 
    # some stuff 
} 

Das Gleiche gilt, wenn Sie upvar #0 test test verwenden (diese beiden Befehle sind grundsätzlich äquivalent).

Dokumentation: global, upvar

+0

Ich bin kein Experte in tcl-Codierung, so können Sie bitte Ihre Antwort bearbeiten präziser zu sein, wo jeder zu setzen, mein Beispiel, wenn Sie möchten. Danke –

+0

@EmadAldeen: fertig. –

+0

Innen 'process_data', kann ich' test' ändern Ich mag, aber außerhalb 'process_data' es„0“bleibt, wie ich es am Anfang festgelegt haben. –