2011-05-25 27 views
6

Có thể khai báo biến tĩnh trong Tcl không?
Tôi sử dụng một chức năng nhất định để nắm bắt các lỗi lệnh không xác định và tôi muốn in thông báo lỗi về lần xuất hiện đầu tiên của lệnh không xác định - vì vậy tôi cần giữ một thứ như danh sách tĩnh bên trong proc. Điều đó có thể không?Biến tĩnh trong Tcl

Trả lời

4

Hoặc bạn chỉ có thể sử dụng một biến toàn cầu thẳng:

set varList {} 

proc useCount {value} { 
    global varList ; 
    lappend varList $value 
} 

useCount One 
useCount Two 
puts $varList 
2

số Nhưng bạn có thể sử dụng một mảng (thường namespaced) toàn cầu được lập chỉ mục theo tên proc ví dụ:

namespace eval foo { 
    variable statics 
    array set statics {} 
} 
... 
proc ::foo::bar args { 
    variable statics 
    upvar 0 statics([lindex [info level 0] 0]) myvar 
    # use myvar 
} 
+0

Cập nhật: xem thêm http://wiki.tcl.tk/memoizing cho một ý tưởng chung – kostix

2

Tcl làm không hỗ trợ biến tĩnh. Thay vì sử dụng một biến toàn cục hoặc một biến bên trong một vùng tên, một cách khác là thực hiện thủ tục của bạn như một phương thức trong một lớp (xem [incr tcl] hoặc snit). Nếu bạn phải triển khai biến tĩnh, wiki Tcl có trang thảo luận vấn đề này: http://wiki.tcl.tk/1532

0

Vì tôi không thích biến toàn cầu (trừ khi bạn có tập lệnh nhỏ), tôi kết hợp các giải pháp từ @kostix và @Jackson:

namespace eval foo { 
    variable varList {} 
} 
proc foo::useCount {value} { 
    variable varList 
    lappend varList $value 
} 

foo::useCount One 
foo::useCount Two 

puts $foo::varList