TCL:TCL命令的默认包是什么

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

我想知道所有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 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
包。但是命令和包之间没有关系。