2010-07-28 49 views
7

Cách thích hợp để khởi tạo một mảng trống trong Tcl là gì?Cách khởi tạo một mảng trong Tcl?

Tôi có đoạn code sau (giản thể):

proc parseFile {filename results_array} { 
    upvar $results_array results 
    set results(key) $value 
} 

set r1 {} 
parseFile "filename" r1 

và tôi nhận được lỗi:

Error: can't set "results(key)": variable isn't array

Trả lời

4

Bạn không khởi tạo mảng trong Tcl, họ chỉ xuất hiện khi bạn thiết lập một thành viên :

proc stash {key array_name value} { 
    upvar $array_name a 
    set a($key) $value 
} 

stash one pvr 1 
stash two pvr 2 
array names pvr 

sản lượng:

two one 
+3

Nếu bạn muốn ép buộc một thứ gì đó thành một mảng, tôi thường làm như nó làm cho mã dễ đọc hơn, bạn có thể sử dụng 'mảng set r1 {}' và r1 là một mảng trống. – Jackson

+0

@Jackson Lưu ý rằng 'array set r1 {}' không bỏ đặt giá trị hiện tại. –

17

Để khởi tạo một mảng, hãy sử dụng "tập hợp mảng". Nếu bạn muốn chỉ tạo đối tượng mảng nội bộ mà không cho nó bất kỳ giá trị nào, bạn có thể cung cấp cho nó một danh sách rỗng làm đối số. Ví dụ:

array set foo {} 

Nếu bạn muốn cung cấp cho nó giá trị, bạn có thể cung cấp cho nó một danh sách trích dẫn đúng cách của các cặp/giá trị chính:

array set foo { 
    one {this is element 1} 
    two {this is element 2} 
} 
0

bộ dấu (tiếng Anh) 80

bộ array_name (key) value

Các vấn đề liên quan