2016-03-30 6 views
1

Ich rufe TCL-Code von Java und möchte ein Array zurück erhalten. Ich habe gelesen, dass dies in TCL nicht möglich ist und Sie andere Ansätze verwenden müssen. Ich habe das Gefühl, dass ich jede mögliche Kombination mit upvar und dict ausprobiert habe und was nicht, aber ich kann es nicht zur Arbeit bringen. Wie bekomme ich mein Array von der Prozedur?Wie man ein Array von einer Prozedur in TCL zurückgibt?

proc getOld {} { 
    set tempList {} 
    set myArray [setK $tempList] 
    puts [array size $myArray] 
} 

getOld 

Danke für jede Hilfe und Tipps!

Antwort

0

Tcl-Arrays sind Sammlungen von Variablen (z. B. die einzelnen Elemente können verfolgt werden) und als solche keine Werte erster Klasse und können nicht direkt übergeben werden. Stattdessen werden sie entweder mit dem Namen übergeben oder es wird eine serialisierte Version des Arrays übergeben.

Mit Pass von Namen, gibt der Anrufer den Namen einer Variablen und die aufgerufene Prozedur verwendet upvar diesen Namen in eine lokale Variable zu binden, dass es aktualisiert werden kann; Die Updates sind außerhalb der Prozedur sichtbar.

Wenn Sie jedoch mit Java integrieren, ist es besser, einen serialisierten Wert Ansatz zu verwenden. Die Prozedur verwendet array get, um ein Array in einen Wörterbuch Wert zu konvertieren, der zurückgegeben werden kann. Wörterbücher sind der Java-Klasse HashMap sehr ähnlich.

proc foo {} { 
    # Do stuff here to make the array... 

    return [array get theArray] 
} 

Sie können auch den dict Befehl verwenden, um mit Wörterbücher zu erstellen und arbeiten direkt. Auf der Java-Seite sollte auf Wörterbücher über die Klasse TclDict zugegriffen werden. (Ich nehme an, Sie verwenden JTcl; wenn nicht, machen Sie das Leben ein bisschen peinlich für sich selbst ...)

Verwandte Themen