在TCL中,是否有一个优雅的实现,它将模仿编程语言中经常使用的ifdef。从TCL脚本语言本身来看,我无法找到TCL解释器原生支持的方式。
答案 0 :(得分:5)
除了标准" if"之外,Tcl中没有任何东西等同于" ifdef"声明。如果你不喜欢标准"如果"声明,tcl为您提供了创建自己的所有基本构建块" ifdef"命令。
例如,ifdef实际上只是一个查找定义值的if语句。一个非常简单的实现可能看起来像这样:
proc define {name value} {
set ::defined($name) $value
}
proc ifdef {name script1 else script2} {
if {[info exists ::defined($name)]} {
uplevel $script1
} else {
uplevel $script2
}
}
然后您可以像这样使用它:
define FOO 1
...
ifdef FOO {
<do this if FOO is defined>
} else {
<do this if FOO is NOT defined>
}
答案 1 :(得分:4)
如果您尝试检查环境变量,可以执行以下操作:
if {[info exists ::env(PROJ_FOO)]} {
set_lib x
} else {
set_lib y
}
假设您有一些名为set_lib
的Tcl命令。
答案 2 :(得分:0)
看一下[info exists varName]和类似的东西。例如:
如果{![info exists myVar]} {puts&#34; myVar未定义,请在此处定义&#34;}
多点打字,但很明显发生了什么,可以用于任何信息可以检查。