在TCL中,是否有一个优雅的实现可以模仿经常在编程语言中使用的ifdef。从TCL脚本语言本身来说,我找不到TCL解释器本地支持的方式。ifdef等效于TCL
0
A
回答
5
除了标准的“if”语句外,没有内置于Tcl的内容等同于“ifdef”。如果你不喜欢标准的“if”语句,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>
}
4
如果你尝试检查一个环境现状变量,你可以这样做:
if {[info exists ::env(PROJ_FOO)]} {
set_lib x
} else {
set_lib y
}
假设你有一些Tcl命令叫set_lib
。
+0
set_lib是一个特定于工具的命令。看起来唯一的办法就是设置一个ENV变量,就像在SHELL编程语言中一样。我在想是否有任何命令行选项来选择性地运行代码。 tcl -f foo.tcl -define PROJ_FOO(避免设置ENV变量) – Mike 2014-11-25 23:45:46
0
看看[信息存在的varName]和类似。例如:
如果{[信息存在myVar的]!} {放“myVar的是未定义所以在这里把它定义”}
多一点打字,但很明显发生了什么事,可以用在任何信息可以检查。
相关问题
- 1. #ifdef等效于Java?
- 2. 在VBA中的IFDEF等效
- 3. Tcl等效于UNIX“cp -pL”命令
- 4. protobuf中#ifdef语法的等效代码
- 5. TCL:关于TCL
- 6. 等效于WM_MOVE
- 7. 等效于'@ECHO ON'的Unix等效
- 8. VLOOKUP等效于MySQL
- 9. __LINE__等效于Javascript
- 10. ereg_replace等效于C#
- 11. View.Frame等效于Android
- 12. powershell等效于SIGHUP
- 13. gluProject等效于Javascript
- 14. VBA:GoalSeek等效于C#
- 15. Android等效于JTextArea
- 16. ArrayList.ensureCapacity等效于Javascript
- 17. InitializeComponent等效于xaml
- 18. roxygen2等效于python
- 19. System.setOut()等效于PrintWriter
- 20. respondsToSelector:等效于CoreFoundation?
- 21. toString()等效于OCaml
- 22. char.IsLetterOrDigit等效于php
- 23. PlayOnLinux等效于windows
- 24. DB2等效于[ColumnName]
- 25. PrintDialog.PrinterSettings等效于WPF
- 26. sh等效于__FILE__
- 27. @selector等效于AppleScriptObjC
- 28. 等效于nevow.tags.raw twisted.web.template
- 29. Url.Content()等效于php?
- 30. cout.precision()等效于python
不,你想做什么? – Kevin 2014-11-24 22:34:33
基于一个特定的项目,我可能需要将命令更改为支持TCL语言芯片设计的工具。例如,'ifdef PROJ_FOO set_lib x'else set_lib y'endif - 这是意图 – Mike 2014-11-24 22:44:32
http://www.gnu.org/software/m4/ – Kevin 2014-11-24 22:46:39