为什么这个二进制扫描类型说明符用反斜杠转义?
Why is this binary scan type specifier escaped with a backslash?
我正在更新一个包含无数单元测试的项目,所以我认为这是学习 Tcl 并将所有这些测试转换为 Tcl 脚本的好时机,这样下次我必须这样做时,它会添加新测试要容易得多。除了阅读我的 2 本关于 Tcl 的新书外,我还在网上查看现有的脚本,我 运行 浏览了这本:
proc do_bincmp_test {testname got expect} {
binary scan $expect \c* expectvals
binary scan $got \c* gotvals
do_test $testname [list set dummy $gotvals] $expectvals
}
我想弄清楚为什么类型说明符用反斜杠转义。我写了这个脚本 运行 它:
set expect {Hello World}
binary scan $expect \c* expectvals
puts $expectvals
binary scan $expect c* expectvals
puts $expectvals
=>72 101 108 108 111 32 87 111 114 108 100
=>72 101 108 108 111 32 87 111 114 108 100
我在文献(在线或我拥有的两本书)中找不到 任何内容 关于转义类型说明符的标准策略,如果转义字符是不是需要转义的特殊字符之一,文字
使用字符。
所以,我认为有 3 种可能性:
- 反斜杠是早期版本的 Tcl 的产物,现在没有任何作用。
- 反斜杠是普通的运行普通脑放屁,无害。
- 反斜杠是我完全忽略的某种邪恶的 Tcl 微妙之处。
我很想知道是哪一个
我正在使用 IronTcl 的 Tcl 8.6.7
根据the Tcl(n) manual page(Tcl语言核心本身的规范),\c
没有特殊含义(没有其他转义),因为它没有明确列为反斜杠替换之一序列,所以这相当于一个普通的 c
字符。我的猜测是它是出于误解或没有触发错误的拼写错误而放在那里的。
除了初始解析稍贵之外,它也没有任何成本。当值到达 Tcl 的字节码时,反斜杠已经消失了。
我正在更新一个包含无数单元测试的项目,所以我认为这是学习 Tcl 并将所有这些测试转换为 Tcl 脚本的好时机,这样下次我必须这样做时,它会添加新测试要容易得多。除了阅读我的 2 本关于 Tcl 的新书外,我还在网上查看现有的脚本,我 运行 浏览了这本:
proc do_bincmp_test {testname got expect} {
binary scan $expect \c* expectvals
binary scan $got \c* gotvals
do_test $testname [list set dummy $gotvals] $expectvals
}
我想弄清楚为什么类型说明符用反斜杠转义。我写了这个脚本 运行 它:
set expect {Hello World}
binary scan $expect \c* expectvals
puts $expectvals
binary scan $expect c* expectvals
puts $expectvals
=>72 101 108 108 111 32 87 111 114 108 100
=>72 101 108 108 111 32 87 111 114 108 100
我在文献(在线或我拥有的两本书)中找不到 任何内容 关于转义类型说明符的标准策略,如果转义字符是不是需要转义的特殊字符之一,文字 使用字符。
所以,我认为有 3 种可能性:
- 反斜杠是早期版本的 Tcl 的产物,现在没有任何作用。
- 反斜杠是普通的运行普通脑放屁,无害。
- 反斜杠是我完全忽略的某种邪恶的 Tcl 微妙之处。
我很想知道是哪一个
我正在使用 IronTcl 的 Tcl 8.6.7
根据the Tcl(n) manual page(Tcl语言核心本身的规范),\c
没有特殊含义(没有其他转义),因为它没有明确列为反斜杠替换之一序列,所以这相当于一个普通的 c
字符。我的猜测是它是出于误解或没有触发错误的拼写错误而放在那里的。
除了初始解析稍贵之外,它也没有任何成本。当值到达 Tcl 的字节码时,反斜杠已经消失了。