在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