3

我是 TCL 新手,正在努力访问其他模块。SOURCE 命令帮助我包含了我在 TCL 程序中编写的其他代码。但是,我认为我在访问代码库时遇到了问题。

例如,当我引用一个数学函数时,找不到它。我认为在搜索通过 tchsh85 调用的程序时,我必须做一些事情来包括数学库在我的计算机上的位置。

invalid command name "::math::statistics::mv-ols"
None of these directories exist on my computer: info library= C:/Tcl/lib/tcl8.5 auto_path= C:/Tcl/lib/tcl8.5 C:/Tcl/lib c:/tcl/lib/teapot/package/win32-x86_64/lib c:/tcl/lib/teapot/package/tcl/lib tcl library= C:/Tcl/lib/tcl8.5 auto_index= source C:/Tcl/lib/tcl8.5/word.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/parray.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/package.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/word.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/word.tcl auto_index= source C:/Tcl/lib/tcl8.5/package.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/package.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/word.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/package.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/package.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/word.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl

我收到了这个答案: ::math::statistics 是 TCLlib 的一部分。要检查是否已安装,请键入

package 需要 tcllib,如果安装了,它会告诉你版本号。如果没有安装,您可以使用 Teacup 为您安装。

我试过代码:

catch {package require nonexistentName}
 package names
puts "[package names]"

我收到了:

Thread logger img::pixmap TclOO tablelist_tile struct::tree opt tcltest img::ico img::pcx struct::set msgcat pngtcl tablelist::common ftp Tclx trsync tdom img::sgi report comm dde Mk4tcl img::sun img::gif img::window textutil cmdline csv img::tga Img img::png Tktable Itk Ttrace tipstack zlibtcl img::base platform fileutil Tk vfs ActiveTcl http tbcload Memchan style struct::graph tablelist treectrl struct::queue img::jpeg activestate::teapot::link img::bmp registry jpegtcl tdomhtml tooltip snit img::ppm struct::stack tcl::tommath img::tiff tls widget struct img::xpm md5 BWidget img::xbm log starkit Tcl Trf tifftcl Itcl img::ps sqlite3 base64 trofs
0.7

我可能不理解 TCL,但在我使用过的其他语言中,有一种方法可以设置目录或文件列表,以便按特定顺序搜索被调用代码。在我看来,我需要告诉 tclsh85 去哪里看。

我从 ActiveState 下载了 tcl 8.5.13 和 BWidget 1.9.6 我安装了 tcl 并在我的计算机上解压了 BWidget,但它与我的 tcl 程序位于不同的位置。数学是其中的一部分吗?如果没有,我应该下载什么?当我在 Windows Vista 上运行时,我更喜欢只获得一个可执行版本而不是我需要构建的东西。我可以创建 tcl 程序,只要它们是独立的,或者如果我可以使用 SOURCE,一切都很好。我遇到麻烦的地方是在我的程序之外调用代码。

我担心需要为我的环境设置 auto_path,因为它现在与我计算机上的任何内容都不对应。

假设我对 tcl 的工作原理一无所知,请回答。我正在尝试自学(在互联网文档和回答问题的人的帮助下)。

谢谢你。

4

1 回答 1

14

好的,我试着总结一下你的问题:

您想知道如何安装所需的软件包。

您可以使用teacup来安装它们,例如teacup install math::statistics,应该可以完成这项工作,或者下载tcllib并安装它。Tcllib 的安装很简单,应该会自动选择正确的安装路径。要在代码中使用库,您只需要做package require math::statistics

您想知道如何在 Tcl 应该查找库的位置添加目录。

根据它是什么类型的库,有两种可能性:

  • 如果有一个名为 pkgIndex.tcl 或 autoIndex 的文件,那么您必须修改该auto_path变量。这可以通过lappend auto_path path/to/the/files.
  • 如果只有一个以 .tm 结尾的文件,那么它会稍微复杂一点:您必须添加正确的父目录。因此,如果您有一个位于 /some/directory/math/statistics.tm 中的 statistics.tm 文件,并且这是 math::statistics 包,那么适当的目录是 /some/directory。您可以使用添加它::tcl::tm::path add /some/directory

这样的事情几乎从来没有必要,因为您成功地安装了 BWidgets,所以 auto_path 对您来说应该没问题。请注意,Tcl 使用(与许多其他语言一样,包括 Java、Perl 等)单个/作为路径分隔符,而不是通常的 windows \

你更喜欢单文件可执行文件 是的,这是可能的,但你应该首先了解如何获取包,需要哪些文件等。单文件 Tcl 分发的技术称为Starkit,这是一个非常有用的东西,但你应该已经熟悉 Tcl。

于 2013-01-17T20:53:03.830 回答