【问题标题】:Variable substitution in TCL inside curly brace花括号内 TCL 中的变量替换
【发布时间】:2018-09-28 16:31:33
【问题描述】:

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

我正在尝试的代码:

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

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

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

【问题讨论】:

  • 使用interface code -clip [list $x1 $y1 $x2 $y2]
  • 嗨,格伦。接口代码本质上是使用大括号语法的第三方工具命令。所以我可以把它改成 "[" 。该命令更像 cmd -option1 -option2 -clip {x1 y1 x2 y2}
  • 牙套没有什么神奇之处。它们是 Tcl 的非插值引号,就像 shell 中的单引号一样。此接口代码只需要一个用于 -clip 选项的参数,因此您需要将这 4 个变量组合成一个元素。我再说一遍,牙套并没有什么神奇之处。您也可以使用双引号:interface code -clip "$x1 $y1 $x2 $y2"。就语法而言,Tcl 是一种非常简单的语言。只有 12 条规则。在此处阅读双引号和大括号之间的区别:tcl.tk/man/tcl8.6/TclCmd/Tcl.htm

标签: tcl


【解决方案1】:

在 Tcl 中,{…} 语法在技术上 的意思是“对此不做任何替换”。将值传递给的命令可能会使用这些字符做自己的事情,并且这些事情可能看起来很像替换(例如,如果它正在评估单词作为脚本,这就是 ifforwhile 和...做),但 Tcl 的核心语法只是让它们单独存在并通过它们。

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

要自己进行替换,您可以执行以下一个

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

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

【讨论】:

    猜你喜欢
    • 2016-09-14
    • 2023-03-25
    • 1970-01-01
    • 2016-02-26
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多