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