Невозможно использовать значения параметров по умолчанию с компаратором в Spring4D

Я не уверен, является ли это какой-то общей проблемой или это связано с реализацией 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 ответ

Решение

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

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

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

 TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer());
Другие вопросы по тегам