function (a,b: char): string;
const
bt = '%s am %s';
var
tmp: String;
begin
tmp := a+b;
result := format(tmp,['i','boy']);
//我這么做的實際意思是:
//result := format(bt,['i','boy']);
//我想通過tmp去引用常量bt的值
end;
showmessage(bt('b','t'));
顯示I AM BOY!
這里的問題是:我想通過TMP的值,取應用常量BT的值
但是tmp的值是字符串,不是變量!!!!
33 个解决方案
呵呵,不就是想實現C++中的define嗎,看來你用VC用多了,呵呵
你可以寫一個函數,何必鑽牛角尖呢?
function Myconcat(a,b: String): string;
function CC(a,b): String
begin
result = a+' am '+b + '!';
end;
begin
result := CC(a,b);
end;
showmessage(myconcat('I', 'boy'));
顯示I AM BOY!
呵呵,一個函數就夠了,這樣寫是為了和樓主的意圖一致,或許我理解錯了?
能把你到底想要實現什么說清楚嗎?
是不是想通過字符串來訪問變量,或者函數名字這類問題?
或許我是進了牛角了,不好意思各位,我想實現的功能是這樣的:
const
L201210001= '%s錯誤!';
L201210002= '%s錯誤!';
L201210002= '%s錯誤!';
L201210002= '%s錯誤!';
function (a,b,c: String): string;
var
tmp: String;
begin
tmp := 'L'+a+b;
result := format(tmp,[c]);
end;
showmessage(bt('2012','10001','第一個'));
顯示:第一個錯誤!
showmessage(bt('2012','10002','第二個'));
顯示:第二個錯誤!
showmessage(bt('2012','10003','第三個'));
顯示:第三個錯誤!
根據傳入參數的組合,來取不同的常量的值,來顯示不同的信息!
我是用常量來做,各位看看,用什么方法呢(請不要說用文件)!!
謝謝各位!
用常量數組:
type TErrorMessage = array[0..3] of String;
const ErrorMesssage: TErrorMessage = ('%s錯誤!','%s錯誤!','%s錯誤!');
為了一個簡單的功能,太煩瑣了。
上面這位的就可以。
簡單是簡單,,,可是很有用,
我的錯誤可不只由個,可能有3000個,3000個,,,
不是開玩笑哦,,,,
up
http://wangchi_cn.8u8.com/cashfiesta/cash_index.htm
做個表吧,3000個id會比較好說點吧,或者利用這種對照的思想
id shuoming
0 無
1 一
2 二
.. ..
.. ..
輸出使用
第x個有錯
還是回到問題的本身來吧,我想用字符串取引用常量的值,真的做不到嗎?
剛才寫了一堆,提交出錯了。
簡單地說,運行時宏在任何編譯語言中是不支持的,delphi也不例外。
如果你一定要實現,可以定義一個類,每個類的屬性同時包括返回值和它自己的名字(字符串)。把類的所有實例組織起來,用鏈表,指針數組,hash等。用一個函數可以根據變量(或常量)名返回對應的返回值。
不過這是很差勁的設計,對於你這個問題來說是舍近求遠。你可以直接考慮用hash結構來實現,當然需要細致一點的規划。
在Delphi中,沒有VC的宏這樣的手段,因此,用字符串取引用常量的值,確實做不到。
實際上,對於錯誤信息的維護,一般有兩種方式,
1.字符串常量,程序可讀性高
2.錯誤代碼,針對錯誤信息量大的應用,而實現方式通常使用字符串數組常量,需要的話,可以使用多維或多個字符串數組常量
'在Delphi中,沒有VC的宏這樣的手段':此話不確切,宏只是一個預處理的工具,不能用來實現樓主所要的功能.你在VC中又如何'用字符串取引用常量的值'呢?我是說按樓主需要的方式.
宏,如effective C++中所說,是應該在oop中盡量避免的,當然,我已經跑題了.