TCL & upvar

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

5 Responses

  1. […] Scrap Book What’s the deal with my brain? Why am I so obviously insane? « TCL & upvar […]

  2. 4692e4a5d1

    4692e4a5d1

  3. All new bonus casino

    All new bonus casino

  4. Free casino slot fun only

    Free casino slot fun only

  5. Play free slot machine game

    Play free slot machine game

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: