我不确定这是否是一些通用问题,还是因为 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 来测试,但我猜发生的事情类似于this https://stackoverflow.com/q/26144675/327083其中,Delphi 的语法规则允许在执行不带参数的方法时省略括号,从而引入歧义。在这里,你在哪里:
TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer);
...编译器无法确定您是否打算传递该方法MyComparer
直接(到过载CreateSortedObjectList
它采用方法指针类型TComparison<T>
) 或者您是否打算执行该方法并传递返回值。在这种情况下,您希望执行后者,因此您可以对编译器明确并包含括号
TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)