'if'分支

时间:2016-02-03 11:24:50

标签: tcl

我收到错误:

    invalid command name "tcl::mathfunc::expr"

尝试以下代码分支时。 $ env(EXB_DESIGN_NAME)的值设置为“seville2”。我希望代码不应该分支到'if'条件。

    if {expr("$env(EXB_DESIGN_NAME)" ne "seville") || expr("$env(EXB_DESIGN_NAME)" ne "seville2")} { -------}

2 个答案:

答案 0 :(得分:3)

这就是你应该写它的方式(这里的引号对于变量也是可选的):

if {"$env(EXB_DESIGN_NAME)" ne "seville" || "$env(EXB_DESIGN_NAME)" ne "seville2"} {
  #Do something
}

如果你绝对想要使用expr(因为if使用expr,这里不太必要),它会是这样的:

if {[expr {"$env(EXB_DESIGN_NAME)" ne "seville"}] || [expr {"$env(EXB_DESIGN_NAME)" ne "seville2"}]} {
  #Do something
}

if {[expr {"$env(EXB_DESIGN_NAME)" ne "seville" || "$env(EXB_DESIGN_NAME)" ne "seville2"}]} {
  #Do something
}

但是我建议不要像if那样编写像这样的代码,因为用我提到的第一种方式编写代码要简单得多。

如果要检查很多字符串,可以使用ni(对于'not in'):

set mylist {"seville" "seville2"}
if {$env(EXB_DESIGN_NAME) ni $mylist} {
  #Do something
}

答案 1 :(得分:3)

Tcl将表达式中的函数转换为对<?xml version="1.0" encoding="utf-8"?> <madcow xsi:schemaLocation="urn:Annotation D:\projects\DELOS\Annotation.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns ="urn:Annotation" kind="withContent" media="text"> <metadata> <author>ferro697702212</author> <title> Eine weitere Annotation </title> <creationDate>18/11/2009 10.26.09</creationDate> <modificationDate>18/11/2015 10.26.09</modificationDate> <sourceHttp>687474703a2f2f7777772e676f6f676c652e69742f</sourceHttp> <type>example</type> <public>true</public> </metadata> <annotationBody> <contents id="1"> <textContent>Das ist ein Beispieltext für eine Annotation</textContent> <attachments> <attachedImage> file:://A/B/C</attachedImage> </attachments> </contents> <contents id="2"> <md:textContent> Eine weitere Annotation </md:textContent> <attachments> <attachedAudio>http://www.h_da.de/xml/test.mp3</attachedAudio> </attachments> </contents> <textSelection> <path>BODY/CENTER/FORM/TABLE[2]/TBODY/TR[2]/TD/FONT/LABEL[3],23,6</path> <contentRef>1</contentRef> </textSelection> </annotationBody> </madcow> 命名空间中等效命令的调用。

但是,您真正的问题是您在已经是表达式的上下文中使用tcl::mathfunc作为函数!你不需要那种复杂性。这意味着我们可以改变:

expr

成:

if {expr("$env(EXB_DESIGN_NAME)" ne "seville") || expr("$env(EXB_DESIGN_NAME)" ne "seville2")} { -------}

它更短。它更清楚。这是正确的......