在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. 在VBA中的IFDEF等效
- 2. Tcl等效於UNIX「cp -pL」命令
- 3. protobuf中#ifdef語法的等效代碼
- 4. 等效於WM_MOVE
- 5. Tiff等效於UIImage.AsPNG()
- 6. IsNan等效於C
- 7. fgets等效於C++
- 8. // @ sourceURL等效於CSS
- 9. __LINE__等效於Javascript
- 10. FileMakerPro等效於Linux?
- 11. ShellExecute等效於.NET
- 12. 等效於libmysqldev FreeBSD
- 13. DataInputStream.skip等效於C#
- 14. curl等效於C#
- 15. JRE等效於Python
- 16. .BAT等效於MAC
- 17. ob_get_contents等效於asp
- 18. Response.Redirect等效於C#
- 19. char.IsLetterOrDigit等效於php
- 20. Exceldna等效於Java
- 21. cout.precision()等效於python
- 22. 等效於OpenSSL的
- 23. Android等效於JTextArea
- 24. powershell等效於SIGHUP
- 25. Winsock.SendData等效於Javascript?
- 26. Url.Content()等效於php?
- 27. HTTPLiveHeaders等效於IE?
- 28. jQuery.getJSON等效於MooTools
- 29. phpmyadmin等效於IOS?
- 30. 等效於Java的
不,你想做什麼? – 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