Почему я могу вызывать функцию без запятой, разделяющей параметры в Delphi? - PullRequest
0 голосов
/ 01 марта 2019

Я создавал некоторые функции в Delphi 5 и случайно попытался скомпилировать без запятых, разделяющих список параметров, и, как ни странно, это работало совершенно нормально.

Я попытался выделить проблему следующим образом:

program Project1;
{$APPTYPE CONSOLE}

procedure foo(i : integer; s : string; di : integer = -1);
begin
  WriteLn(s);
end;

var
  str: string;
  int: integer;
begin
  str := 'aaa';
  int := 1000;
  foo(int str int);
  ReadLn;
end.

И он компилируется, исключений не выдается, и параметры переопределяют функции полностью, как и ожидалось.

Что я заметил, так это то, что если я в конце удаляю параметр по умолчанию, он начинает выдавать ошибку компиляцииNot enough actual parameters

Почему Delphi имеет такое поведение?Это какая-то ошибка компилятора или странная механика?

1 Ответ

0 голосов
/ 01 марта 2019

Похоже, это ошибка компилятора, которая была исправлена, по крайней мере, с D2010 и, вероятно, раньшеНа момент написания этой статьи Delphi 5 было двадцать лет, а параметры по умолчанию были введены только в D4, поэтому есть основания полагать, что были некоторые ранние проблемы, которые с тех пор были исправлены.

...