鍍金池/ 教程/ 物聯(lián)網(wǎng)/ TCL命名空間
TCL內(nèi)置函數(shù)
TCL變量
TCL嵌套循環(huán)
TCL決策
TCL循環(huán)
Tcl if...else語句
Tcl教程
TCL字符串
TCL邏輯運(yùn)算符
TCL Switch語句
TCL列表
TCL運(yùn)算符優(yōu)先級(jí)
TCL數(shù)據(jù)類型
TCL環(huán)境設(shè)置
TCL正則表達(dá)式
TCL命名空間
TCL運(yùn)算符
TCL特殊變量
TCL數(shù)組
TCL算術(shù)運(yùn)算符
Tcl For循環(huán)
TCL文件I/O
TCL關(guān)系運(yùn)算符
TCL if語句
TCL命令
TCL基本語法
TCL三元運(yùn)算符
TCL continue語句
TCL嵌套if語句
TCL字典
TCL break語句
TCL包
TCL 嵌套switch語句
TCL while循環(huán)
TCL位運(yùn)算符
TCL過程
TCL錯(cuò)誤處理

TCL命名空間

名稱空間是一個(gè)容器組標(biāo)識(shí)符,用于組變量和程序。命名空間可從Tcl 8.0版開始使用。引入命名空間之前,有一個(gè)全局范圍?,F(xiàn)在有了命名空間,我們可以分區(qū)全局范圍。

創(chuàng)建命名空間

使用命名空間命令創(chuàng)建命名空間。一個(gè)簡(jiǎn)單的例子,創(chuàng)建命名空間如下圖所示

#!/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

當(dāng)執(zhí)行上面的代碼,產(chǎn)生以下結(jié)果:

33

在上面的程序,可以看到有一個(gè)變量myResult和程序Add的一個(gè)命名空間。這使得創(chuàng)建變量和程序可根據(jù)相同的名稱在不同的命名空間。

嵌套的命名空間

TCL允許命名空間的嵌套。一個(gè)簡(jiǎ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

當(dāng)執(zhí)行上面的代碼,產(chǎn)生以下結(jié)果:

test1
test2

導(dǎo)入和導(dǎo)出空間

可以在前面的例子命名空間看到,我們使用了大量的作用范圍解決運(yùn)算符,它們的使用變得更復(fù)雜。我們可以通過導(dǎo)入和導(dǎo)出命名空間避免這種情況。下面給出一個(gè)例子。

#!/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]

當(dāng)執(zhí)行上面的代碼,產(chǎn)生以下結(jié)果:

40

忘記命名空間

可以通過使用forget子刪除導(dǎo)入的命名空間。一個(gè)簡(jiǎn)單的例子如下所示。

#!/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::*

當(dāng)執(zhí)行上面的代碼,產(chǎn)生以下結(jié)果:

40

上一篇:TCL位運(yùn)算符下一篇:TCL過程