berdasarkan tcl manual, perintah upvar berguna untuk membuat link
(?hubungan?) ke variabel yang berada pada stack yang berbeda. Syntax
dari perintah upvar sendiri adalah sebagai berikut :
upvar ?level? otherVar myVar ?otherVar myVar ...?
Berdasarkan definisi diatas akan menimbulkan pertanyaan lain, apakah
yang dimaksud dengan lingkup stack (stack frame) yang berbeda?
untuk mengetahui lebih jelasnya, misalkan kita membuat method a, dan
didalam method a tersebut kita memanggil method b, ketika method a
dibuat, maka tcl akan membuat stack frame untuk method a dimana
seluruh local variabel akan disimpan, dan ketika memanggil method b
maka tcl akan membuat lagi stack frame untuk method b, sehingga method
a dan b mempunyai stack frame yang berbeda, dan juga method a dan b
mempunyai level yang berbeda dimana method a mempunyai level 1 (bila
diasumsikan method a dipanggil dari lingkup global), sedangkan method
b mempunyai level 2.
Untuk mengetahui level dari method/procedure dapat digunakan perintah
info level.
Karena method a dan b mempunyai stack frame yang berbeda maka method b
tidak dapat mengaksed variabel yang berada pada method a, nah perintah
upvar dapat membuat method b untuk mengakses variabel yang terdapat
pada method a.
proc top {} {
set x 10
bottom
puts "setelah memanggil bottom $x"
}
proc bottom {} {
upvar 1 x localx
incr localx 20
}
setelah kita panggil top
% top 20 setelah memanggil bottom 30 %
selain itu perintah upvar berguna untuk mengimplementasikan
call-by-name procedure, contohnya adalah sebagai berikut.
proc top {topArg} {
set localArg [expr $topArg+1]
puts "before calling bottom is : $localArg"
bottom localArg
puts "after calling is : $localArg"
}
proc bottom {bottomArg} {
upvar $bottomArg arg
puts "bottom is passed $bottomArg with value $arg"
incr arg
}
hasilnya bila kita panggil top 30
top 30 before calling bottom is : 31 bottom is passed localArg with value 31 after calling is : 32
Filed under: Software Dev, tcl/tk
[...] Scrap Book What’s the deal with my brain? Why am I so obviously insane? « TCL & upvar [...]
4692e4a5d1
4692e4a5d1
All new bonus casino
All new bonus casino
Free casino slot fun only
Free casino slot fun only
Play free slot machine game
Play free slot machine game