首页 > 解决方案 > 花括号内 TCL 中的变量替换

问题描述

我正在尝试在花括号中执行变量替换,据我所知,这在 TCL 中是不可行的。

我正在尝试的代码:

interface code -clip {$x1 $y1 $x2 $y2}

接口代码是第三方 TCL 函数,它有一个名为 clip 的选项,它读取大括号内的 x1,y1,x2,y2 坐标。

我需要在花括号内输入 x1,y2 的值​​。

标签: tcl

解决方案


在 Tcl 中,{…}语法在技术上意味着“对此不做任何替换”。将值传递给的命令可能对这些字符执行自己的操作,并且这些操作可能看起来很像替换(例如,如果它正在将单词作为脚本评估,这就是ifand forand and whileand ... 所做的),但是Tcl 的核心语法只是不理会它们并通过它们。

为了得到你想要的,有几个选择。你可以在传递值之前进行替换——如果你选择这样做,命令实际上看不到你已经这样做了——或者你可以让命令进行替换(如果它是第三个,这不是一个有用的建议——党的代码,当然)。

要自己进行替换,您可以执行以下操作之一

interface code -clip [list $x1 $y1 $x2 $y2]
interface code -clip "$x1 $y1 $x2 $y2"
interface code -clip [subst {$x1 $y1 $x2 $y2}]

如果命令采用列表(您的情况看起来像;它似乎是坐标列表),则第一个选项很好。如果命令采用字符串,则第二个选项很好。当事情变得复杂时,第三个选项很好!尽量避免非常复杂的东西通常是个好主意。程序很难编写和阅读,而不是故意让它们更难理解。


推荐阅读