2016-03-30 24 views
1

Java'dan TCL kodunu arıyorum ve bir dizi geri almak istiyorum. Bunu, TCL'de mümkün olmadığını ve başka yaklaşımları kullanmanız gerektiğini okudum. Upvar ve dict ile mümkün olan her kombinasyonu denedim gibi hissediyorum, ama ne işe yaramazsa yapamıyorum. Dizimi prosedürden nasıl alabilirim?TCL'deki bir prosedürden bir dizi nasıl döndürülebilir?

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

getOld 

Yardımlarınız ve önerileriniz için teşekkür ederiz!

cevap

0

Tcl dizileri, değişken koleksiyonlarıdır (örn., Tek tek elemanlar izlenebilir) ve bu nedenle birinci sınıf değerler değildir ve doğrudan aktarılamaz. Bunun yerine, ya adıyla geçirilir ya da dizinin serileştirilmiş bir sürümü geçirilir. adıyla tarafından topunu alan

, arayan bir değişkenin adını veren ve adı verilen prosedür o güncelleyebildiğinizi yerel değişkene bu ismi bağlamak upvar kullanır; güncellemeler prosedürün dışında görünür. Ancak, Java ile bütünleştirdiğinizde, serileştirilmiş değer yaklaşımını kullanmak daha iyidir. Yordam, bir dizi döndürülebilir sözlük değerine dönüştürmek için array get kullanır. Sözlükler, Java'nın HashMap sınıfına çok benzer.

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

    return [array get theArray] 
} 

da oluşturabilir ve doğrudan sözlüklere çalışmak için dict komutunu kullanabilirsiniz. Java tarafında, sözlüklere TclDict sınıfı üzerinden erişilebilir. (Eğer JTcl kullanıyorsunuz varsayalım; eğer yaşamınız için kendinize biraz garip davranıyorsunuz…)

İlgili konular