Tcl 你能拿到那张“支票”吗;“过程名称”;在进程内?

Tcl 你能拿到那张“支票”吗;“过程名称”;在进程内?,tcl,Tcl,在一个进程中,你能得到进程名吗(不需要硬编码)?e、 g 你当然可以 使用info-level命令: proc my_proc { some_arg } { puts "entering proc [lindex [info level 0] 0]" } 你会得到你想要的 entering proc my_proc 另一种方法是使用info frame,它提供一个包含一些其他信息的字典,并读取proc键: proc my_proc { some_arg } { puts "e

在一个进程中,你能得到进程名吗(不需要硬编码)?e、 g

你当然可以

使用
info-level
命令:

proc my_proc { some_arg } {
    puts "entering proc [lindex [info level 0] 0]"
}
你会得到你想要的

entering proc my_proc
另一种方法是使用
info frame
,它提供一个包含一些其他信息的字典,并读取
proc
键:

proc my_proc { some_arg } {
    puts "entering proc [dict get [info frame 0] proc]"
}
这一次,您将获得完全限定的进程名:

entering proc ::my_proc

这应该是
[lindex[info level 0]0]
,因为
info level 0
返回一个包含当前进程名称和参数的列表。
info level 0
获取有关它被称为什么的信息,
info frame 0
获取关于它是什么的信息。这两者通常是密切相关的,但并不总是……多纳尔,你能举一个例子说明两者的不同之处吗?因为我不经常使用它,根据我的经验,我从来没有看到这种区别。Thanks@MarcoPallante,你自己的例子很好。[info frame]返回::my_proc,[info level]返回my_proc(不带::)。如果从名称空间外部或内部调用::ns1::proc1,这将特别不同。很好,@NirLevy,所以要获得真正等效的东西,我应该在一种情况下执行
[lindex[info level 0]0]
,以及
[namespace tail[lindex][信息帧0]0]
,对吗?
entering proc ::my_proc