在读取软件包的documentation时,似乎有一个存储软件包的特定目录(?)。但是,我没有看到tcl_pkgPath
,也没有看到auto_path
:
thufir@dur:~/tcl/packages$
thufir@dur:~/tcl/packages$ printenv | grep tcl*
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
PWD=/home/thufir/tcl/packages
OLDPWD=/home/thufir/tcl
thufir@dur:~/tcl/packages$
thufir@dur:~/tcl/packages$ printenv | grep auto*
XAUTHORITY=/run/user/1000/gdm/Xauthority
thufir@dur:~/tcl/packages$
为什么telnet.tcl
无法在weather
文件(位于同一目录中)中找到weather.tcl
程序包?
thufir@dur:~/tcl/telnet$
thufir@dur:~/tcl/telnet$ tclsh telnet.tcl
can't find package weather 1.0
while executing
"package require weather 1.0"
(file "telnet.tcl" line 4)
thufir@dur:~/tcl/telnet$
thufir@dur:~/tcl/telnet$ cat telnet.tcl
#!/usr/bin/expect -f
#!usr/bin/expect
package require Expect
package require weather 1.0
thufir@dur:~/tcl/telnet$
thufir@dur:~/tcl/telnet$ cat weather.tcl
package provide weather 1.0
package require Tcl 8.5
namespace eval ::util {
namespace connect
variable server
}
proc ::weather::connect {} {
spawn telnet rainmaker.wunderground.com
expect -nocase "Press Return to continue:"
send "\r"
puts "done"
}
thufir@dur:~/tcl/telnet$
另请参见:
https://www.tcl.tk/man/tcl8.5/tutorial/Tcl31.html
导入对我来说似乎是正确的。。
为清楚起见,我复制/粘贴了上面的示例:
错误。thufir@dur:~/tcl/packages$ thufir@dur:~/tcl/packages$ ll total 16 drwxrwxr-x 2 thufir thufir 4096 May 4 02:22 ./ drwxrwxr-x 6 thufir thufir 4096 May 4 02:22 ../ -rw-rw-r-- 1 thufir thufir 215 May 4 02:21 foo.tcl -rw-rw-r-- 1 thufir thufir 1207 May 4 02:20 tutstack.tcl thufir@dur:~/tcl/packages$ thufir@dur:~/tcl/packages$ cat foo.tcl package require tutstack 1.0 set stack [tutstack::create] foreach num {1 2 3 4 5} { tutstack::push $stack $num } while { ![tutstack::empty $stack] } { puts "[tutstack::pop $stack]" } tutstack::destroy $stack thufir@dur:~/tcl/packages$ thufir@dur:~/tcl/packages$ cat tutstack.tcl # Register the package package provide tutstack 1.0 package require Tcl 8.5 # Create the namespace namespace eval ::tutstack { # Export commands namespace export create destroy push pop peek empty # Set up state variable stack variable id 0 } # Create a new stack proc ::tutstack::create {} { variable stack variable id set token "stack[incr id]" set stack($token) [list] return $token } # Destroy a stack proc ::tutstack::destroy {token} { variable stack unset stack($token) } # Push an element onto a stack proc ::tutstack::push {token elem} { variable stack lappend stack($token) $elem } # Check if stack is empty proc ::tutstack::empty {token} { variable stack set num [llength $stack($token)] return [expr {$num == 0}] } # See what is on top of the stack without removing it proc ::tutstack::peek {token} { variable stack if {[empty $token]} { error "stack empty" } return [lindex $stack($token) end] } # Remove an element from the top of the stack proc ::tutstack::pop {token} { variable stack set ret [peek $token] set stack($token) [lrange $stack($token) 0 end-1] return $ret } thufir@dur:~/tcl/packages$ thufir@dur:~/tcl/packages$ tclsh foo.tcl can't find package tutstack 1.0 while executing "package require tutstack 1.0" (file "foo.tcl" line 1) thufir@dur:~/tcl/packages$
但它是相同的语义
在阅读软件包的文档时,似乎有一个存储软件包的特定目录(?)。但是,我没有看到tcl_pkgPath,也没有看到auto_path:thufir @ dur:〜/ tcl / packages $ ...
问题是Tcl找不到您的程序包的索引文件(应称为pkgIndex.tcl
)。如果您已经将weather 1.0
包实现为文件weather.tcl
,那么您可能会希望拥有一个类似这样的索引文件在同一目录中