TCL内花括号中的变量替换

TCL内花括号中的变量替换,tcl,Tcl,我试图在花括号内执行变量替换,我知道这在TCL中是不可行的 我正在尝试的代码: interface code -clip {$x1 $y1 $x2 $y2} 接口代码是第三方TCL函数,它有一个名为clip的选项,该选项读取大括号内的x1、y1、x2、y2坐标 我需要在花括号中输入x1,y2的值。在Tcl中,{…}语法在技术上意味着“在这个问题上根本不进行替换”。值被传递到的命令可能会对这些字符执行自己的操作,这些操作看起来很像替换(例如,如果它将单词作为脚本进行计算,这就是if和for和wh

我试图在花括号内执行变量替换,我知道这在TCL中是不可行的

我正在尝试的代码:

interface code -clip {$x1 $y1 $x2 $y2}
接口代码是第三方TCL函数,它有一个名为clip的选项,该选项读取大括号内的x1、y1、x2、y2坐标


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

在Tcl中,
{…}
语法在技术上意味着“在这个问题上根本不进行替换”。值被传递到的命令可能会对这些字符执行自己的操作,这些操作看起来很像替换(例如,如果它将单词作为脚本进行计算,这就是
if
for
while
和…do),但是Tcl的核心语法只是将它们单独处理并传递给用户

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

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

interface code -clip [list $x1 $y1 $x2 $y2]

如果命令采用一个列表(您的案例看起来像是一个坐标列表),那么第一个选项很好。如果命令采用字符串,则第二个选项很好。当事情变得复杂时,第三种选择是好的!避免使用非常复杂的东西通常是个好主意;程序很难编写和读取,而不会故意使其更难理解。

在Tcl中,
{…}
语法在技术上意味着“在这个问题上根本不进行替换”。值被传递到的命令可能会对这些字符执行自己的操作,这些操作看起来很像替换(例如,如果它将单词作为脚本进行计算,这就是
if
for
while
和…do),但是Tcl的核心语法只是将它们单独处理并传递给用户

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

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

interface code -clip [list $x1 $y1 $x2 $y2]

如果命令采用一个列表(您的案例看起来像是一个坐标列表),那么第一个选项很好。如果命令采用字符串,则第二个选项很好。当事情变得复杂时,第三种选择是好的!避免使用非常复杂的东西通常是个好主意;程序很难编写和读取,而不会故意使其更难理解。

使用
接口代码-clip[list$x1$y1$x2$y2]
Hi Glen。接口代码本质上是使用大括号语法的第三方工具命令。所以我可以把它改成“[”,这个命令更像cmd-option1-option2-clip{x1y1-x2y2}大括号没有什么神奇之处。它们是Tcl的非内插引号,就像shell中的单引号一样。此接口代码只需要-clip选项的一个参数,所以您需要将这4个变量组合到一个元素中。我重复一遍,大括号没有什么神奇之处。您也可以使用双引号:
interface code-clip“$x1$y1$x2$y2”
。在语法方面,Tcl是一种非常简单的语言。只有12条规则。在这里了解双引号和大括号之间的区别:使用
接口代码-clip[列出$x1$y1$x2$y2]
Hi Glen。接口代码本质上是一个使用大括号语法的第三方工具命令。因此我可以将其更改为“[”。该命令更像cmd-option1-option2-clip{x1 y1 x2 y2}大括号没有什么神奇之处。它们是Tcl的非内插引号,就像shell中的单引号一样。此接口代码只需要-clip选项的一个参数,所以您需要将这4个变量组合到一个元素中。我重复一遍,大括号没有什么神奇之处。您也可以使用双引号:
interface code-剪辑“$x1$y1$x2$y2”
。在语法方面,Tcl是一种非常简单的语言。只有12条规则。请在此处阅读双引号和大括号之间的区别:
interface code -clip [subst {$x1 $y1 $x2 $y2}]