2010-02-25 29 views
5

Đây có phải là yêu cầu của mã TCL tốt không? Điều gì sẽ xảy ra nếu chúng tôi không sử dụng từ khóa "bỏ đặt" trong tập lệnh? Tôi có biết về bất kỳ tác dụng xấu nào không?chúng ta có cần phải "bỏ đặt" biến trong TCL không?

Tôi đang kế thừa một số mã cũ và các lỗi xuất hiện do "không đặt" biến không tồn tại đang đẩy tôi lên tường!

Trả lời

8

Có thể xác định xem biến có tồn tại hay không trước khi sử dụng, sử dụng lệnh info exists. Hãy chắc chắn rằng nếu bạn không sử dụng unset, bạn sẽ không làm rối loạn logic của chương trình ở một nơi khác.

Không có lý do cụ thể nào của Tcl cho unset một biến, tức là, nó sẽ không gây rò rỉ bộ nhớ hoặc hết xử lý biến hoặc bất kỳ điều gì điên rồ như thế. Sử dụng unset có thể là một thực hành lập trình phòng thủ, bởi vì nó ngăn cản việc sử dụng sau này của biến sau khi nó không còn liên quan nữa. Nếu không biết nhiều hơn về mã chính xác mà bạn đang làm việc, thật khó để cung cấp thông tin chi tiết hơn.

+0

Không rò rỉ bộ nhớ hoặc tương tự. Chỉ là những gì tôi đã hy vọng được nghe! Bây giờ tôi có thể đi cấm những kẻ vô dụng "bất tỉnh" trong suốt đoạn mã. Có, nhìn vào nó bây giờ, có vẻ như lập trình phòng thủ nhiều hơn cho tôi quá. Tuy nhiên, trong trường hợp của tôi, nó trông giống như một chút "quá nhiều" quốc phòng. "thông tin tồn tại" là mới đối với tôi - cảm ơn! – chronodekar

2

Bên cạnh những phản ứng khác, nếu phiên bản Tcl của bạn là đủ mới, bạn cũng có thể sử dụng:

unset -nocomplain foo

mà sẽ foo unset nếu nó tồn tại, nhưng sẽ không phàn nàn nếu nó doesn 't.

Jeff

0

Lưu ý vì tôi dường như không thể nhận xét về "thông tin tồn tại" ở trên;

tôi sử dụng hình thức này thường ..

if { [info exists pie] && [$pie == "ThisIsWhatIWantInPie"]} { 
    puts "I found what I wanted in pie." 
} else { 
    puts "Pie did not exist; but I still did not error,TCL's evaluation \ 
      will see the conditional failed on the [info exists] and not \ 
      continue onto the comparison." 
} 
1

Phụ thuộc vào hệ thống số liệu thống kê có thể cung cấp cho "không có khả năng phân bổ byte" vấn đề và khi kịch bản của bạn được lưu trữ dữ liệu khổng lồ vào các biến và mảng. nó sẽ phá vỡ khi bộ nhớ cache hoặc RAM đầy đủ nói "không thể phân bổ XXXXXXXX byte".

Đảm bảo bạn không lưu trữ nhiều dữ liệu đó vào biến, nếu không sẽ không được đặt khi sử dụng hết cho các tập dữ liệu tương ứng (biến)

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