代码之家  ›  专栏  ›  技术社区  ›  falstro

使用tclapi的字符串替换

tcl c
  •  0
  • falstro  · 技术社区  · 15 年前

    有没有一种方法可以(ab)使用tclc-API来“解析”字符串,执行所有替换(包括方括号中的子命令),但在实际评估生成的命令行之前停止?

    我要做的是创建一个命令(C中,但我会考虑做一个TCL包装器,如果有一个优雅的方式在那里做),这需要一个块作为一个参数(即卷曲括号引用字符串)。我想取那个块,把它分割开来,用与执行它相同的方式执行替换,但是停在那里,解释结果行。

    我考虑过创建一个名称空间,其中所有有效的第一个单词都被定义为命令,但是这个列表太大(而且非常动态),所以很快就会变得太麻烦。我也尝试过这种方法,但效果很好 unknown 未知的 用于一堆东西,并且不能绑定到名称空间,因此每当执行块时,我都必须定义它,并将其设置回之前的状态,这让我感觉非常不稳定。最重要的是,我会冒着与实际命令冲突的风险(风险相当低,但不是零),所以我更愿意不使用 未知的 指挥部。

    Tcl_ParseCommand (以及家族的其他成员),这将生成一个解析树,我可以手动对其进行评估。如果没有更好的解决方案,我想我会采取这种方式,但如果有“官方”的方式,我当然更愿意这样做。。

    1 回复  |  直到 15 年前
        1
  •  2
  •   RHSeeger    15 年前

    看看 Tcl_SubstObj . 它是[subst]命令的C等价物,这似乎就是您要查找的。

    > set mydata {mylist item $listitem group item {$group item}}
    > set listitem {1 2 3}
    > subst $mydata      ;# error: can't read "group": no such variable
    > proc groupsubst {data} {
        return [uplevel 1 list $data]
    }
    > groupsubst $mydata ;# mylist item {1 2 3} group item {$group item}