Syntax 如何在Tcl中粘贴文字

Syntax 如何在Tcl中粘贴文字,syntax,tcl,Syntax,Tcl,是否有任何语法技巧/功能允许我在TCL中粘贴两个文字,例如将带括号({..})的单词和双引号的“..)单词连接成一个单词 我不是问设置一个{foo};设置b“条形\n矩形”;设置c$a$b或附加a$b——我知道它们;但是关于没有中间变量或命令的东西。类似于{*}word(将单词转换为列表) 我猜答案是“不可能”,但我对Tcl的肤浅知识不允许我得出这样的结论。如果你的话是一个有效的列表,你可以: set orig {abc def} set new [join $orig {}] 如果您的wor

是否有任何语法技巧/功能允许我在TCL中粘贴两个文字,例如将带括号(
{..}
)的单词和双引号的
“..
)单词连接成一个单词

我不是问
设置一个{foo};设置b“条形\n矩形”;设置c$a$b
附加a$b
——我知道它们;但是关于没有中间变量或命令的东西。类似于
{*}word
(将单词转换为列表)


我猜答案是“不可能”,但我对Tcl的肤浅知识不允许我得出这样的结论。

如果你的话是一个有效的列表,你可以:

set orig {abc def}
set new [join $orig {}]

如果您的word是有效列表,您可以执行以下操作:

set orig {abc def}
set new [join $orig {}]

如果您使用的是最新的Tcl版本(8.6.2或更新版本),则可以使用

set c [string cat {foo} "bar\nquux"]
对于旧版本,您可以求助于

set c [format %s%s {foo} "bar\nquux"]

如果您使用的是最新的Tcl版本(8.6.2或更新版本),则可以使用

set c [string cat {foo} "bar\nquux"]
对于旧版本,您可以求助于

set c [format %s%s {foo} "bar\nquux"]

如果没有命令,就无法完成您的要求,因为大括号单词的语法不允许在之前或之后执行任何操作,并且一旦您有了几个单词,您就需要使用命令将它们连接起来(因为从Tcl语言核心的角度来看,命令就是这样做的;获取一些值并生成一个值结果)。不是在字符串中间有括号是语法错误-它不是-但它确实阻止他们引用字符。要明确的是:

  • 放置a{b}
    打印
    a{b}
    ,因为
    {
    在这种情况下并不特殊,而是成为值的一部分
  • put{a}b
    是一个语法错误。(唯一的例外是
    {*}
    ,它的开头是
    {expand}
    ,但这太冗长了。)
  • 有效的方法:

    • 使用
      字符串cat
    • 使用连接过程(例如,
      proc strcat{ab}{return$a$b}
    • 将两个值放在大括号内,使其成为组合文字。当然,只有当两部分都是文字时,这才有效
    • 将带大括号的部分转换为不带大括号(和不带双引号)的形式。这始终是可能的,因为每个带大括号的字符串都有一个不带大括号的等价项,但可能涉及大量反斜杠

    没有命令就无法完成您的要求,因为大括号单词的语法不允许在之前或之后执行任何操作,一旦您有几个单词,您就需要使用命令将它们连接起来(因为从Tcl语言核心的角度来看,命令就是这样做的;获取一些值并生成值结果)不是在字符串中间有括号是语法错误-它不是-但它确实阻止了他们引用字符。
  • 放置a{b}
    打印
    a{b}
    ,因为
    {
    在这种情况下并不特殊,而是成为值的一部分
  • put{a}b
    是一个语法错误。(唯一的例外是
    {*}
    ,它的开头是
    {expand}
    ,但这太冗长了。)
  • 有效的方法:

    • 使用
      字符串cat
    • 使用连接过程(例如,
      proc strcat{ab}{return$a$b}
    • 将两个值放在大括号内,使其成为组合文字。当然,只有当两部分都是文字时,这才有效
    • 将带大括号的部分转换为不带大括号(和不带双引号)的形式。这始终是可能的,因为每个带大括号的字符串都有一个不带大括号的等价项,但可能涉及大量反斜杠

    您也可以创建自己的字符串连接器:
    proc strcat{a b}{return$a$b}
    或更一般的:
    proc strcat args{join$args”“}
    您也可以创建自己的字符串连接器:
    proc strcat{a b}{return a$b}
    或更一般的:
    proc strcat args{join$args”“}
    你可以使用
    返回级别0$a$b
    的反向滑动来添加,不需要专门的
    过程
    字符串猫
    。这与我在发布Q后所做的研究相匹配,所以我会说这就是答案。至少在有人来证明我们都错了并且遗漏了一些明显的东西之前;-)而
    返回-级别0
    起作用(实际上相当好)…我们添加了
    string cat
    ,这样我们就不必记住那个特别的晦涩。可以使用
    返回级别0$a$b
    添加一个backflip,不需要专门的
    proc
    string cat
    。这与我发布Q后所做的研究相匹配,所以我会说这是答案。至少在l有人来告诉我们,我们都错了,并且遗漏了一些明显的东西;-)而
    返回-级别0
    工作(实际上相当好)…我们添加了
    字符串cat
    ,这样我们就不必记住那个特别的晦涩了。