不能在 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 实际参数不足

但是,没有任何参数或指定了所有参数,它可以工作。有什么理由我不能这样做吗?

我没有Spring4D 可以测试,但我猜正在发生的事情与此类似,其中 Delphi 的语法规则允许在执行不带参数的方法时省略括号引入了歧义。 在这里,你在哪里做:

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

。编译器无法确定您是打算直接传递方法MyComparer(传递到采用方法指针类型TComparison<T>CreateSortedObjectList重载(,还是要执行该方法并传递返回值。 在这种情况下,您希望执行后者,因此您可以显式使用编译器并包含括号

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

相关内容

  • 没有找到相关文章

最新更新