Невозможно использовать значения параметров по умолчанию с компаратором в Spring4D - PullRequest
0 голосов
/ 10 октября 2018

Я не уверен, если это какая-то общая проблема или это связано с реализацией Spring4D, но я не могу использовать значения параметров по умолчанию для создания компаратора.

type
  TMyClass = class
    class function MyComparer(AParam: Boolean = False): IComparer<TMyClass>;
  end;

implementation

class function TMyClass.MyComparer(AParam: Boolean): IComparer<TMyClass>;
begin
  Result := TComparer<TMyClass>.Construct(
    function (const L, R: TMyClass): Integer
    begin
      Result := 0;
    end);
end;

Когда я создаю список безуказанный параметр, я получаю сообщение об ошибке о пропущенных параметрах.

TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer);

E2035 Недостаточно фактических параметров

Однако без каких-либо параметров или со всеми указанными параметрами это работает.Есть ли причина, по которой я не могу этого сделать?

1 Ответ

0 голосов
/ 10 октября 2018

У меня нет Spring4D для тестирования, но я предполагаю, что происходит что-то похожее на this , где синтаксические правила Delphi, допускающие пропуск скобок при выполнении метода, который не принимает параметров, вводятнеоднозначность.Здесь, где вы делаете:

 TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer);

... компилятор не может быть уверен, если вы хотите передать метод MyComparer напрямую (к перегрузке CreateSortedObjectList, которая принимает тип указателя методаTComparison<T>) или вы хотите выполнить метод и передать возвращаемое значение.В этом случае вы хотите сделать последнее, так что вы можете быть явным для компилятора и включать скобки

 TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer());
...