Tcl - Không gian tên

Không gian tên là một vùng chứa tập hợp các số nhận dạng được sử dụng để nhóm các biến và thủ tục. Không gian tên có sẵn từ phiên bản Tcl 8.0. Trước khi giới thiệu không gian tên, có một phạm vi toàn cầu duy nhất. Bây giờ với không gian tên, chúng ta có các phân vùng bổ sung có phạm vi toàn cầu.

Tạo không gian tên

Không gian tên được tạo bằng cách sử dụng namespacechỉ huy. Dưới đây là một ví dụ đơn giản để tạo không gian tên:

#!/usr/bin/tclsh

namespace eval MyMath {
  # Create a variable inside the namespace
  variable myResult
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
  set ::MyMath::myResult [expr $a + $b]
}
MyMath::Add 10 23

puts $::MyMath::myResult

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

33

Trong chương trình trên, bạn có thể thấy có một không gian tên với một biến myResult và một thủ tục Add. Điều này giúp bạn có thể tạo các biến và thủ tục có cùng tên dưới các không gian tên khác nhau.

Không gian tên lồng nhau

Tcl cho phép lồng các vùng tên. Dưới đây là một ví dụ đơn giản về lồng ghép các không gian tên:

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
}

namespace eval extendedMath {
   # Create a variable inside the namespace
   namespace eval MyMath {
      # Create a variable inside the namespace
      variable myResult
   }
}
set ::MyMath::myResult "test1"
puts $::MyMath::myResult
set ::extendedMath::MyMath::myResult "test2"
puts $::extendedMath::MyMath::myResult

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

test1
test2

Nhập và Xuất không gian tên

Bạn có thể thấy trong các ví dụ về không gian tên trước đó, chúng tôi sử dụng rất nhiều toán tử phân giải phạm vi và nó phức tạp hơn để sử dụng. Chúng ta có thể tránh điều này bằng cách nhập và xuất không gian tên. Dưới đây là một ví dụ:

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
   return [expr $a + $b]
}

namespace import MyMath::*
puts [Add 10 30]

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

40

Quên không gian tên

Bạn có thể xóa vùng tên đã nhập bằng cách sử dụng forgetlệnh phụ. Một ví dụ đơn giản được hiển thị bên dưới:

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
   return [expr $a + $b]
}
namespace import MyMath::*
puts [Add 10 30]
namespace forget MyMath::*

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

40