Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在tcl 8.4中获取行号_Tcl - Fatal编程技术网

在tcl 8.4中获取行号

在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

我需要在它的主体中获取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]
    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及更高版本。