簡體   English   中英

為什么抑制符號可以用於Delphi中的控制字符,這是一個好主意嗎?

[英]Why can the circumflex sign be used for control chars in Delphi and is it a good idea?

我剛剛用一種奇怪的語法遇到了關於SO的答案:

如何在Delphi中的字符串中包含換行符?

MyString := 'Hello,' + ^M + ^J + 'world!';

我已經使用Delphi幾年了,但我不知道你可以使用抑揚符號來控制字符。

這只是早期德爾福或Turbo Pascal時代遺留下來的嗎?

它現在應該用嗎?

PS:我不是在詢問關於換行符的建議,有sLineBreak和原始問題中討論的其他方法。

不,它不是來自Turbo Pascal的日子。 它是從TP之前的幾十年,在MS-DOS之前,甚至可能在UNIX之前。 像早期的300比特每秒撥號調制解調器和DEC VT-52終端,PDP-8機器上的RT-8操作系統和早期版本的C的舊版本。或者甚至更老 - 雖然對我來說比較老的僅僅是傳說:-) 。

“^”符號是“Ctrl”鍵的快捷方式。 所以傳統表示法中的^C代表Microsoft表示法中的Ctrl+C 這種符號在MS-DOS時代被廣泛用於文本模式菜單,如前面提到的Turbo Pascal,Norton Utilities,DOS Navigator等。

在我的記憶中,您可以將“^”視為“減去64”。
因此Chr(65)'A'那么Chr(1)將是^A
並且^@將是#0 :-) AFAIR在MS-DOS時按Ctrl + Shift +“2 / @”實際上會產生#0進入BIOS鍵盤緩沖區:-)

^ [將AFAIR稱為#27又名Esc(猿)char - 如果你運行telnet.exe你會看到它被提示為轉義字符。

所以Turbo Pascal很久以前選擇遵循時間祝福的慣例,然后從那時起就開始實施向后兼容規則。 就個人而言,當你想要它在一條線上時,我會把'bla-bla'^M^J'foo-baz'文字比'bla-bla'#13#10'foo-baz'更像字符串。 當你的文字需要多個源代碼行時,使用plus構造值更適合。

遺憾的是,Delphi IDE中的語法高亮顯示在這種常量上無可救葯地被打破。

是的,這是昔日的遺產。

不,你不應該養成使用這個功能的習慣。 請記住,代碼的讀取頻率高於編寫代碼。 總是想到你的讀者很可能不會知道這種語法的含義。

是的,這是從TP天遺留下來的。 你也可以這樣寫你的陳述

mystring:= 'Hello'#13#10'world!';

這可能比使用^ M和^ J更不明顯,更容易理解。 當然,你應該真正定義常量

const
 crlf = #13#10

begin
 mystring:= 'Hello' + crlf + 'world!';
end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM