在tcl 8.4中获取行号
我需要在它的主体中获取tcl proc的调用行号 从8.5开始,tcl具有允许以下操作的信息帧命令:在tcl 8.4中获取行号,tcl,Tcl,我需要在它的主体中获取tcl proc的调用行号 从8.5开始,tcl具有允许以下操作的信息帧命令: proc printLine {} { set lineNum [dict get [info frame 1] line] } 我需要同样的8.4版本它在8.4版本中不可用;数据根本没有收集。我想你可以在队列中搜索一个唯一的标记,但那就差不多了 proc lineNumber {uniqueToken} { set name [lindex [info level 1] 0
proc printLine {} {
set lineNum [dict get [info frame 1] line]
}
我需要同样的8.4版本它在8.4版本中不可用;数据根本没有收集。我想你可以在队列中搜索一个唯一的标记,但那就差不多了
proc lineNumber {uniqueToken} {
set name [lindex [info level 1] 0]
set body [uplevel 2 [list info body $name]]
set num 0
foreach line [split $body \n] {
incr num
if {[string first $uniqueToken $line] >= 0} {
return $num
}
}
error "could not find token '$uniqueToken'"
}
请注意,8.4不再受支持。升级。我正在使用tcl 8.5,但它应该可以在8.4版上运行。这是:
#!/usr/bin/tclsh
puts "tcl version: $tcl_version"
proc linum {} {
if {![string equal -nocase precompiled [lindex [info frame -1] 1]]} {
return [lindex [info frame -1] 3]
} else {
return Unknown
}
}
puts "call proc @line:[linum]"
结果是:
tcl version: 8.5
call proc @line:13
您可以参考更多详细信息至于
uniqueToken
,只需将键盘捣碎即可生成。这里有一个免费的示例:sfdhkghlsldkh
。它只需要是一个在代码中其他地方不会出现的简单单词。您可以使用info frame
。OP明确提到,这在Tcl8.4中是不可能的。您的代码仅适用于Tcl 8.5及更高版本。