List 如何避免反睫毛炎?
我有以下代码:List 如何避免反睫毛炎?,list,tcl,List,Tcl,我有以下代码: proc list_backslash {} { array unset options array set options { -inputs {vdd} -outputs {vss} } set inputs { vdd2 vdd dvdd } set outputs { vss2 vss dvss } set updateOptions [ list \ -inputs
proc list_backslash {} {
array unset options
array set options {
-inputs {vdd}
-outputs {vss}
}
set inputs { vdd2 vdd dvdd }
set outputs { vss2 vss dvss }
set updateOptions [ list \
-inputs $inputs \
-outputs $outputs ]
array set options $updateOptions
foreach {k v} [array get options] {
puts "$k => $v"
}
}
因为我在updateOptions
中有很多键值对,所以出现了严重的反斜杠!有没有更好的方法来执行代码更新操作?我尝试了subst
+大括号{}
,意识到它不会保留列表结构,因此会将其毁灭。选项a)将其全部放在一行
选项b)代码结构如下:
set options(-inputs) $inputs
set options(-outputs) $outputs
选项c)学会喜欢反斜杠。选项a)将所有内容放在一行
选项b)代码结构如下:
set options(-inputs) $inputs
set options(-outputs) $outputs
选项c)学会喜欢反斜杠。一般来说,如果你需要继续一行,你必须使用Tcl的某种报价机制。否则,命令调用将在行结束时结束。
[
括号]
也可以包含多个语句;这是合法的,但实际上并不推荐
但这确实意味着有时你会有尴尬的选择。也许你最好这样做:
set updateOptions {
-inputs $inputs
-outputs $outputs
}
foreach {key value} $updateOptions {
set options($key) [subst $value]
}
当代码位于一个过程中时,只有在获得大量选项(数千个)时,array set
命令才会特别有效
或者,如果您有Tcl 8.6,
dict-map
可能更好:
array set options [dict map {key value} $updateOptions {subst $value}]
请注意,
subst
在Tcl 8.6中不是特别有效的命令,除非与文字参数一起使用。这是因为对于变量参数,它会在运行时将它们编译成字节码。一般来说,如果您需要继续一行,则必须在Tcl中使用某种引用机制。否则,命令调用将在行结束时结束。[
括号]
也可以包含多个语句;这是合法的,但实际上并不推荐
但这确实意味着有时你会有尴尬的选择。也许你最好这样做:
set updateOptions {
-inputs $inputs
-outputs $outputs
}
foreach {key value} $updateOptions {
set options($key) [subst $value]
}
当代码位于一个过程中时,只有在获得大量选项(数千个)时,array set
命令才会特别有效
或者,如果您有Tcl 8.6,
dict-map
可能更好:
array set options [dict map {key value} $updateOptions {subst $value}]
请注意,
subst
在Tcl 8.6中不是特别有效的命令,除非与文字参数一起使用。这是因为对于变量参数,它会在运行时将它们编译成字节码。tcl中的行延续反斜杠是很自然的,通常不会被认为是难看的。如果你发现自己写了很多tcl,那么就要学会把它看作是不丑陋的。您可以很容易地说服自己另一种方法:多行语句没有反斜杠会导致语法混乱或不一致。以javascript为例,看起来它在做某事的代码实际上做了其他事情,因为阅读代码的人假设它是一个多行语句,但解释器明确地执行为两个独立的语句。所以没有反斜杠是很难看的。tcl中的直线延续反斜杠是很自然的,通常不被认为是难看的。如果你发现自己写了很多tcl,那么就要学会把它看作是不丑陋的。您可以很容易地说服自己另一种方法:多行语句没有反斜杠会导致语法混乱或不一致。以javascript为例,看起来它在做某事的代码实际上做了其他事情,因为阅读代码的人假设它是一个多行语句,但解释器明确地执行为两个独立的语句。所以没有反斜杠是丑陋的。