TCL:TCL命令的默认包是什么
我想知道所有tcl命令将在哪个包中可用。 例如字符串、列表等 当我们想要使用expect时,我们将使用expect包,类似地,我们在不导入任何包的情况下使用这些(字符串、列表等…)命令。我想知道这些都属于哪个包裹TCL:TCL命令的默认包是什么,tcl,Tcl,我想知道所有tcl命令将在哪个包中可用。 例如字符串、列表等 当我们想要使用expect时,我们将使用expect包,类似地,我们在不导入任何包的情况下使用这些(字符串、列表等…)命令。我想知道这些都属于哪个包裹 基本上我来自爪哇。。。java中的“java.lang”包默认值。列表和字符串不属于任何特殊包。它们是基本命令。在tcl中,所有变量都被视为字符串 $ tclsh % set l [list 1 2 3 4 5] 1 2 3 4 5 % lappend l 6 1
基本上我来自爪哇。。。java中的“java.lang”包默认值。列表和字符串不属于任何特殊包。它们是基本命令。在tcl中,所有变量都被视为字符串
$ tclsh
% set l [list 1 2 3 4 5]
1 2 3 4 5
% lappend l 6
1 2 3 4 5 6
% set str "Hello, World"
Hello, World
形式上,构成Tcl语言核心的所有命令都由
Tcl
包提供。在运行任何代码之前,该包是必需的(并且必须是;package
命令本身就是这些命令之一)。按照历史惯例,大多数Tcl命令都放在全局名称空间中,该名称空间位于所有名称空间的命令解析路径上。(除非使用名称空间路径
显式设置,否则它在路径上逻辑上是最后一个)在名称空间中定义了一些Tcl命令::Tcl
名称空间,包括相当数量的内部命令,不支持直接访问这些命令(如果没有文档记录,它就不受支持;有些是明确不受支持的,但相对来说是众所周知的;它们位于::tcl::unsupported
命名空间中)。命名空间::oo
(及其子项)是为TclOO保留的
由其他包(尤其是任何新创建的包)定义的命令应放置在与包同名的命名空间中。这只是一种约定,在较旧的包中(特别是在命名空间机制之前的包,如Tk和TclX)不遵循因为维护与现有脚本的向后兼容性更为重要,但如果遵循它,您肯定会发现这是最容易的。此外,通常的惯例是,全局名称空间主要属于用户定义的应用程序,尽管其他软件包的污染程度很高,但这是您的责任你觉得合适吗
命名空间的导出命令(通常应为具有相同名称的包的公共命令)可以在另一个命名空间中使用,无需通过命名空间导入
:
namespace eval ::foo {
proc grill {} { puts "grill!" }
namespace export grill
}
namespace eval ::bar {
namespace import ::foo::grill
grill
puts [namespace which grill]; # Prints ::bar::grill
puts [namespace origin grill]; # Prints ::foo::grill
}
或者(从Tcl 8.5)您可以更新名称空间的解析路径,以便它也可以在其他名称空间中查看:
namespace eval ::foo {
proc grill {} { puts "grill!" }
}
namespace eval ::bar {
namespace path ::foo
grill
puts [namespace which grill]; # Prints ::foo::grill
puts [namespace origin grill]; # Prints ::foo::grill
}
请注意,这两种机制有点不同:对于导入的命令,该命令有一个本地委托(由于该委托实际上是一个命令,您可以
重命名它,等等)然而,对于路径更改,没有这样的委托;原始命名空间中的命令直接位于解析grill
在该上下文中的含义时。基本上,这些命令属于Tcl
包。但是命令和包之间没有关系。