2

请参见以下示例:

$tclsh
% proc test {} {
    puts "line 2: [info frame 0]"
    # line 3 \ 
    line 4
    puts "line 5: [info frame 0]"
}
% test
line 2: type proc line 2 cmd {info frame 0} proc ::test level 0
line 5: type proc line 5 cmd {info frame 0} proc ::test level 0
% info body test

puts "line 2: [info frame 0]"
# line 3 line 4
puts "line 5: [info frame 0]"

第二个info frame给出第 5 行,这是合理的。
但它在返回的字符串的第 4 行info body(因为\被删除并且第 3 行和第 4 行连接在一起。)
是否可以使行号在info frame和之间保持一致info body

4

1 回答 1

0

info frame命令显然很奇怪。它尝试从代码起源的地方返回行号。如果您将代码放在文件中,则该line字段将是该文件中的行号(将在该file字段中命名,当代码为sourced 时出现该字段)。这是来自终端会话的示例剪切粘贴,显示了实际值:

bash$ 猫 test_frame.tcl
包需要 Tcl 8.5
过程测试 {} {
    将“第 2 行:[信息帧 0]”
    # 第 3 行 \
    第 4 行
    将“第 5 行:[信息帧 0]”
}
测试
bash$ tclsh test_frame.tcl
第 2 行:键入源第 3 行文件 /home/dkf/test_frame.tcl cmd {info frame 0} proc ::test level 0
第 5 行:键入源第 6 行文件 /home/dkf/test_frame.tcl cmd {info frame 0} proc ::test level 0

现在我知道这很烦人,因为您无法将行号与info body结果同步,但是获取文件行号(嗯,可能)更有用。

(不过,我希望我们在errorInfo跟踪消息中使用这些信息;我们做了很多工作来构建它,然后几乎没有用它做任何事情......)

于 2013-04-28T18:12:58.670 回答