gpt4 book ai didi

tcl - 在多行中整齐地列出值

转载 作者:行者123 更新时间:2023-12-04 01:51:28 25 4
gpt4 key购买 nike

一个如何在多行中列出值而每行末尾没有反斜杠?

如果末尾没有反斜杠,则无法在多行中创建列表。
例如,以下(错误的)代码:

set pets [list 
cat
dog
elephant
]

给出一个错误:
invalid command name "cat"
while executing
"cat"
invoked from within
"set pets [list
cat
dog
elephant
]"

可以通过在行尾添加反斜杠来修复它:
set pets [list \
cat \
dog \
elephant \
]

这是丑陋的,容易出错。

请注意:
  • 我知道使用大括号( {} ),但它不允许执行命令并且还保留多余的空白字符。
  • 可以使用任何其他命令(例如 dict create ),而不仅仅是 list就像我的例子一样。

  • 使用 Tcl 8.5

    最佳答案

    Tcl 使用换行符(和分号)作为命令分隔符。这是基本语法的核心部分;您无法解决它,因此您必须使用双引号或大括号来避免反斜杠炎。让我们看看可能性(请记住,列表分隔符可以是任何非空的空白序列)。

    丑陋,容易出错 list带反斜杠

    set pets [list \
    cat \
    dog \
    $elephant \
    ]

    带大括号,没有替换
    set pets {
    cat
    dog
    $elephant
    }

    (请注意,在上面, $elephant 只是一个字符序列,而不是读取的变量。)

    使用双引号,替换但要小心!
    set pets "
    cat
    dog
    $elephant
    "

    通过“小心!”我的意思是,如果列表中有一个多字成员,则需要一个内部 [list …]或其他引用:
    set pets "
    cat
    dog
    [list $elephant]
    [list "elephant's child"]
    "

    但这对 list 来说是正确的。 +反斜杠在顶部。

    使用 subst
    set pets [subst {
    cat
    dog
    $elephant
    "elephant's child"
    }]

    我可能会“清理”(并避免其他潜在问题):
    set pets [list {*}[subst {
    cat
    dog
    [list $elephant]
    [list "elephant's child"]
    }]]

    但坦率地说,如果事情变得非常复杂,那么我实际上是这样做的:

    用几个命令构建
    set pets {
    cat
    dog
    }
    lappend pets $elephant "elephant's child"

    当两个或多个命令可以完成所有事情并且问题更少时,就没有必要在头上猛烈抨击自己使用一个命令。

    关于tcl - 在多行中整齐地列出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22629160/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com