我不确定这是一些通用问题还是因为 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 实际参数不足
但是,没有任何参数或指定了所有参数,它可以工作。有什么理由我不能这样做吗?
我没有Spring4D 可以测试,但我猜正在发生的事情与此类似,其中 Delphi 的语法规则允许在执行不带参数的方法时省略括号引入了歧义。 在这里,你在哪里做:
TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer);
。编译器无法确定您是打算直接传递方法MyComparer
(传递到采用方法指针类型TComparison<T>
的CreateSortedObjectList
重载(,还是要执行该方法并传递返回值。 在这种情况下,您希望执行后者,因此您可以显式使用编译器并包含括号
TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer());