Невозможно использовать значения параметров по умолчанию с компаратором в 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());