Delphi ^ Синтаксис: документированный, подразумеваемый или недокументированный? - PullRequest
38 голосов
/ 06 февраля 2011

Позвольте мне объяснить на примере.В Delphi вы можете написать

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ^C then
    ShowMessage('The user wants to copy something.')
  else if Key = ^V then
    ShowMessage('The user wants to paste.')
end;

для проверки команд клавиатуры Ctrl + C и Ctrl + V.Фактически, тот же синтаксис работает для Ctrl + A, где A - это любой символ, и, конечно же, вы можете также использовать оператор case вместо if s.Вы даже можете сделать ShowMessage(^A), поэтому, по-видимому, ^A считается char.

Однако при просмотре официальной документации Delphi я не могу найти какую-либо ссылку на этосинтаксис.Но, может быть, синтаксис ^A настолько распространен, что его понимают как часть основного формата простого текстового файла?Или это просто недокументированная особенность языка программирования Delphi?(Обратите внимание, что вышеприведенные конструкции фактически используются в исходном коде RTL / VCL. Но, конечно, только Embarcadero и Embarcadero могут использовать недокументированные функции, если таковые имеются.)

Ответы [ 2 ]

29 голосов
/ 07 февраля 2011

Давным-давно это был экранирующий символ, позволяющий вам иметь константы для управляющих символов в более читаемом виде.

const
  CtrlC = ^C;
begin
  Write(Ord(CtrlC));
end.

Это определяет константу Char со значением #3, затем записывает 3 в Borland Pascal 7, и я помню, что видел ее и за годы до этого.

Я только что проверил руководства по языкам Turbo Pascal 5.0 и Borland Pascal 7.0, но не смог его найти, поэтому он кажется недокументированным.

Edit: Я помню, что это была вещь Borland, и просто проверил : он не является частью стандарта ISO Pascal (раньше это был стандарт ANSI Pascal, спасибо Sertac за то, что это заметил).

Это задокументировано в документации Free Pascal .

SGI использует обратную косую черту в качестве escape-символа, как для своих документов .

Подробнее Редактировать: Я нашел его задокументировано в Delphi в двух словах и Delphi Basics site .

Нашел: Только что нашел на странице 37 Справочного руководства Turbo Pascal 3 .

- Йерун

3 голосов
/ 07 февраля 2011

Это известная недокументированная функция.Но опять же, последняя официальная документация по синтаксису взята из Delphi 7.

...