首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找不到tcllib的包

找不到tcllib的包
EN

Stack Overflow用户
提问于 2014-12-14 15:46:14
回答 1查看 494关注 0票数 0

我有一个奇怪的问题,我使用fedora 20并在我的系统上安装了tcllib。

但是,如果我使用包,需要uri,例如,我得到了一个响应中找不到的包。

有谁知道这里的问题是什么,或者如何确定tcllib是否添加到包索引中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-14 19:10:02

Tcl以两种方式查找包:使用auto_path和使用tcl::tm::path

1. auto_path --传统机制。

当您执行package require时,包管理器会查看包是否已经存在,或者是否存在从文件系统获取包的指令。如果这两种情况都不是真的,它将要求package unknown处理程序加载它(严格地说,它是使用package unknown命令安装的处理程序)。该处理程序的默认实现通过在您的pkgIndex.tcl目录及其直接子目录中查找auto_path文件来加载包。

auto_path是一个全局变量,包含要搜索的目录的Tcl列表。你可能只需在正确的地方lappendpkgIndex.tcl是一个Tcl脚本,它描述了如何使包可用,它通过调用适当的package ifneeded命令来实现。的实际加载。

一旦一个包不存在,但它的获取指令就会出现,Tcl就会简单地对这些指令进行eval:它们只是一个普通的旧脚本(通常只调用source和/或load来完成繁重的工作)。

2. Tcl模块-新的(8.5中)机制。

Tcl模块系统使用使用tcl::tm::path命令管理的不同的搜索系统。tcl::tm::path list子命令将告诉您它的位置(老实说,这是一个巨大的列表),您可以使用tcl::tm::path add子命令扩展路径,并增加搜索的位置。Tcl模块将整个包放置到一个文件中(扩展名为.tm),并有一个结构化名称,以避免有单独的pkgIndex.tcl文件;TM加载程序可以从文件名本身合成package ifneeded调用(在所有情况下,这都是用source完成的;有一些聪明的方法可以在文件中打包二进制代码,以便进行load编辑,但它们远远超出了这个答案的范围)。

此时,当实际需要包时,您将返回到文件的source;不管您使用的是模块还是传统的包,该部分都是相同的。

模块系统比传统的搜索机制要快得多,因为它不需要打开任何文件就可以知道该做什么:它只是使用glob来选择正确的选项。然而,在如何包装事物方面,它的灵活性较低:多文件包(例如,您自己制造的几乎任何东西)都不能被制成模块(嗯,不是没有额外的工作)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27470962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档