'中的Tcl错误;如果';分支
我得到一个错误:'中的Tcl错误;如果';分支,tcl,Tcl,我得到一个错误: invalid command name "tcl::mathfunc::expr" 在尝试以下if代码分支时。$env(EXB_DESIGN_NAME)的值设置为“seville2”。我希望代码不应分支到“if”条件 if {expr("$env(EXB_DESIGN_NAME)" ne "seville") || expr("$env(EXB_DESIGN_NAME)" ne "seville2")} { -------} 这就是您应该如何编写它(对于变
invalid command name "tcl::mathfunc::expr"
在尝试以下if代码分支时。$env(EXB_DESIGN_NAME)的值设置为“seville2”。我希望代码不应分支到“if”条件
if {expr("$env(EXB_DESIGN_NAME)" ne "seville") || expr("$env(EXB_DESIGN_NAME)" ne "seville2")} { -------}
这就是您应该如何编写它(对于变量,引号在这里也是可选的): 如果您确实想使用
expr
(此处不太必要,因为如果使用expr
),则应该是这样的:
if {[expr {"$env(EXB_DESIGN_NAME)" ne "seville"}] || [expr {"$env(EXB_DESIGN_NAME)" ne "seville2"}]} {
#Do something
}
或
但是我不建议像这样编写代码,因为按照我提到的第一种方式编写代码要简单得多
如果要检查大量字符串,可以使用(对于“not in”):
这就是您应该如何编写它(对于变量,引号在这里也是可选的):
如果您确实想使用expr
(此处不太必要,因为如果使用expr
),则应该是这样的:
if {[expr {"$env(EXB_DESIGN_NAME)" ne "seville"}] || [expr {"$env(EXB_DESIGN_NAME)" ne "seville2"}]} {
#Do something
}
或
但是我不建议像这样编写代码,因为按照我提到的第一种方式编写代码要简单得多
如果要检查大量字符串,可以使用(对于“not in”):
Tcl将表达式中的函数转换为对Tcl::mathfunc
命名空间中等效命令的调用
然而,您真正的问题是,您正在使用expr
作为上下文中的函数,而上下文已经是一个表达式了!你不需要那种复杂性。这意味着我们可以改变:
if {expr("$env(EXB_DESIGN_NAME)" ne "seville") || expr("$env(EXB_DESIGN_NAME)" ne "seville2")} { -------}
进入:
它比较短。更清楚了。这是正确的…Tcl将表达式中的函数转换为对Tcl::mathfunc
命名空间中等效命令的调用
然而,您真正的问题是,您正在使用expr
作为上下文中的函数,而上下文已经是一个表达式了!你不需要那种复杂性。这意味着我们可以改变:
if {expr("$env(EXB_DESIGN_NAME)" ne "seville") || expr("$env(EXB_DESIGN_NAME)" ne "seville2")} { -------}
进入:
它比较短。更清楚了。这是正确的…interp别名{}::tcl::mathfunc::expr{}返回-code ok
也可以解决该问题。但是我认为这是个坏主意。interp别名{}::tcl::mathfunc::expr{}返回-code ok
也可以解决这个问题。但是我认为这是个坏主意。顺便说一句,这些ne
关系中至少有一个始终为真,这导致整个如果表达式始终为真。没错,Peter,我已将逻辑OR改为逻辑AND。谢谢。顺便说一句,这些ne
关系中至少有一个始终为真,这导致整个if
表达式始终为真。没错,Peter,我已将逻辑OR更改为逻辑AND。非常感谢。
if {expr("$env(EXB_DESIGN_NAME)" ne "seville") || expr("$env(EXB_DESIGN_NAME)" ne "seville2")} { -------}
if {$env(EXB_DESIGN_NAME) ne "seville" || $env(EXB_DESIGN_NAME) ne "seville2"} { -------}