繁体   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