如何在每行末尾没有反斜杠的情况下列出多行中的值?
如果最后没有反斜杠,则无法在多行中创建列表.
例如,以下(错误)代码:
set pets [list
cat
dog
elephant
]
Run Code Online (Sandbox Code Playgroud)
给出错误:
invalid command name "cat"
while executing
"cat"
invoked from within
"set pets [list
cat
dog
elephant
]"
Run Code Online (Sandbox Code Playgroud)
它可以通过在行尾添加反斜杠来修复:
set pets [list \
cat \
dog \
elephant \
]
Run Code Online (Sandbox Code Playgroud)
这是丑陋的,容易出错.
请注意:
{&}),但它不允许执行命令并且还保留冗余的空格字符.dict create),不仅list如我的示例中那样.使用Tcl 8.5
Don*_*ows 14
Tcl使用换行符(和分号)作为命令分隔符.这是基本语法的核心部分; 你不能解决它所以你必须使用双引号或大括号来避免反斜杠.让我们看一下可能性(记住,列表分隔符可以是任何非空的空格序列).
list反斜杠set pets [list \
cat \
dog \
$elephant \
]
Run Code Online (Sandbox Code Playgroud)
set pets {
cat
dog
$elephant
}
Run Code Online (Sandbox Code Playgroud)
(注意,在上面,$elephant只是一个字符序列,而不是变量读取.)
set pets "
cat
dog
$elephant
"
Run Code Online (Sandbox Code Playgroud)
通过"小心!"我的意思是,如果你有一个列表的多字成员,你需要一个内部[list …]或其他引用:
set pets "
cat
dog
[list $elephant]
[list "elephant's child"]
"
Run Code Online (Sandbox Code Playgroud)
但是list顶部的+反斜杠也是如此.
subst......set pets [subst {
cat
dog
$elephant
"elephant's child"
}]
Run Code Online (Sandbox Code Playgroud)
我可能会"清理它"(并避免其他潜在的问题):
set pets [list {*}[subst {
cat
dog
[list $elephant]
[list "elephant's child"]
}]]
Run Code Online (Sandbox Code Playgroud)
但坦率地说,如果事情变得非常复杂,那么我实际上是这样做的:
set pets {
cat
dog
}
lappend pets $elephant "elephant's child"
Run Code Online (Sandbox Code Playgroud)
当两个或更多的人用更少的问题做所有事情时,没有必要抨击自己头脑以使用一个命令.