2015-10-16 82 views

回答

1

這有點像路徑名稱。如果您位於根目錄(未命名的/路徑),則使用bar/bar時不會產生任何影響:兩者都指的是/bar目錄。如果您在/foo中,則使用bar/bar時非常重要:第一個指的是/foo/bar目錄,第二個指的是/bar目錄。

::對於命名空間名稱類似/。在根名稱空間(空的::名稱)中,如果使用bar::bar,則沒有區別:它們都指的是::bar名稱空間。如果您處於::foo,則使用bar::bar時非常重要:第一個指的是::foo::bar名稱空間,第二個指的是::bar名稱空間。

文檔:namespace

1

通常,它取決於運行代碼的上下文。如果它在全局命名空間中運行,則兩者之間有沒有的區別。如果它在另一個命名空間內運行(例如,在參數::foo中),則會有差異(因爲會創建::foo::somenamespace)。

對於其打包差別不大,由package ifneeded提供的腳本 - 因此運行由package require - 實際上是由該行下運行(內tclPkg.c,在功能PkgRequireCore):

 code = Tcl_EvalEx(interp, script, -1, TCL_EVAL_GLOBAL); 

也就是說,他們'總是在全局範圍內,::命名空間。

+0

謝謝你的解釋Donal – ivan73