我Tcl的項目庫已在樹這樣的組織:的Tcl中:namespace eval裏命名進口
MYLIB:Base文件夾(具有一定的TCL)文件
MYLIB /富,MYLIB /條(子目錄與其他一些Tcl文件)。
我特別有MYLIB /富/ mc.tcl,提供一攬子三菱商事與名
# File mc.tcl
namespace eval ::mc {
namespace export dance&sing
}
proc ::mc::dance&sing { {s {Oh Tannenbaum} } } { puts "$s,...." }
package provide mc 1.4
效果很好。現在我加入MYLIB /酒吧/ by.tcl,提供了一個命名空間:通過使用封裝MC:
# file by.tcl
package require mc
namespace eval ::by {}
proc ::by::execute {} {
::mc::dance&sing "Sushi&more"
}
package provide by 1.1
到目前爲止,一切工作爲做廣告。現在我想(作爲練習)通過從mc導入導出的符號來更改by.tcl。這是我的變化:
namespace eval ::by {
namespace import ::mc::dance&sing
}
當通過pkg_mkIndex運行修改後的文件,我發現所得將pkgIndex.tcl不包含包通過,這通常是一個標誌的條目,有一些錯誤的tcl文件。但是,我可以執行by.tcl而不會收到錯誤消息。如果我的設計中存在錯誤,它必須更加微妙。
我的TCLLIBPATH環境變量僅包含基本文件夾mylib(當然是絕對路徑)。這應該不成問題,因爲這些包的文件是遞歸地找到的。
有什麼想法在這裏出了什麼問題?
我加了一個例子重現問題
這裏是你如何重現它:
(1)下載http://files.ronaldf.eml.cc/stovfl0.tgz然後解壓到某個目錄 (2)確保慶典(或zsh中)和tclsh時,在你的PATH (3)CD到您解包一切的目錄,並且像這樣運行:
bash ./run-it.sh
你應該看到類似的輸出到這一點:
pkg_mkIndex for directory ....stovfl0/mylib/foo
pkg_mkIndex for directory ....stovfl0/mylib/bar
(4)貓MYLIB /酒吧/將pkgIndex.tcl
你會發現,這包 '由' 缺少。
無法重現,抱歉。有沒有其他的東西可以同時改變? – 2014-10-05 11:49:10
我已經在8.4和8.6中試過了,我無法複製;在這兩種情況下,我都得到了正確的'pkgIndex.tcl'。 ___確切地說你正在調用'pkg_mkIndex'嗎?你使用的是什麼確切版本的Tcl? – 2014-10-05 20:26:55
在這種情況下,我使用的是Mac OSX Snow Leopard的Tcl 8.5。我cd'd到目錄,並調用了「pkg_mkIndex。」的Tcl腳本。當我註釋掉命名空間導入時,它可以工作。當我取消註釋時,它停止工作。我會嘗試在不同的平臺上重現它,但是由於每個人都確信這應該起作用,所以我懷疑我一定犯了一些嚴重的錯誤。我會在這裏發佈我的發現,如果我真的可以在特定的平臺上進行復制(本週沒有訪問Mac),我會上傳一個zip壓縮文件,以便您可以在系統上嘗試它。 – user1934428 2014-10-06 09:00:01