超級難題,大家都來看看,UP給分


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 个解决方案

#1


study

#2


up

#3


up

#4


呵呵,不就是想實現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!

呵呵,一個函數就夠了,這樣寫是為了和樓主的意圖一致,或許我理解錯了?

#5


能把你到底想要實現什么說清楚嗎?

是不是想通過字符串來訪問變量,或者函數名字這類問題?

#6


問題看不懂。

#7


或許我是進了牛角了,不好意思各位,我想實現的功能是這樣的:
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','第三個'));
顯示:第三個錯誤!
根據傳入參數的組合,來取不同的常量的值,來顯示不同的信息!
我是用常量來做,各位看看,用什么方法呢(請不要說用文件)!!
謝謝各位!

#8


是的,我是想用字符串來訪問變量!!!!!!!

#9


你這樣做煩了,沒必要!

#10


給個建議吧,!!!!!!!!!!

#11


用常量數組:
type TErrorMessage = array[0..3] of String;

const ErrorMesssage: TErrorMessage = ('%s錯誤!','%s錯誤!','%s錯誤!');

#12


為了一個簡單的功能,太煩瑣了。
上面這位的就可以。

#13


簡單是簡單,,,可是很有用,
我的錯誤可不只由個,可能有3000個,3000個,,,
不是開玩笑哦,,,,

#14


up

#15


用case語句了。

#16


up

#17


up

#18


up
http://wangchi_cn.8u8.com/cashfiesta/cash_index.htm

#19


做個表吧,3000個id會比較好說點吧,或者利用這種對照的思想
id     shuoming
0        無
1        一
2        二
..       ..
..       ..


輸出使用

第x個有錯

#20


還是回到問題的本身來吧,我想用字符串取引用常量的值,真的做不到嗎?

#21


剛才寫了一堆,提交出錯了。
簡單地說,運行時宏在任何編譯語言中是不支持的,delphi也不例外。
如果你一定要實現,可以定義一個類,每個類的屬性同時包括返回值和它自己的名字(字符串)。把類的所有實例組織起來,用鏈表,指針數組,hash等。用一個函數可以根據變量(或常量)名返回對應的返回值。
不過這是很差勁的設計,對於你這個問題來說是舍近求遠。你可以直接考慮用hash結構來實現,當然需要細致一點的規划。

#22


up

#23


up

#24


up

#25


你的要求是宏替換,做不到的

#26


在Delphi中,沒有VC的宏這樣的手段,因此,用字符串取引用常量的值,確實做不到。
實際上,對於錯誤信息的維護,一般有兩種方式,
1.字符串常量,程序可讀性高
2.錯誤代碼,針對錯誤信息量大的應用,而實現方式通常使用字符串數組常量,需要的話,可以使用多維或多個字符串數組常量

#27


UP

#28


up

#29


好像不行耶

#30


'在Delphi中,沒有VC的宏這樣的手段':此話不確切,宏只是一個預處理的工具,不能用來實現樓主所要的功能.你在VC中又如何'用字符串取引用常量的值'呢?我是說按樓主需要的方式.
宏,如effective C++中所說,是應該在oop中盡量避免的,當然,我已經跑題了.

#31


up

#32


up

#33


學習

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com