Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何避免反睫毛炎?_List_Tcl - Fatal编程技术网

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为例,看起来它在做某事的代码实际上做了其他事情,因为阅读代码的人假设它是一个多行语句,但解释器明确地执行为两个独立的语句。所以没有反斜杠是丑陋的。