无法在 Spring4D 中将默认参数值与比较器一起使用
Can't use default parametr values with comparer in 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 Not enough actual parameters
然而,在没有任何参数或指定了所有参数的情况下,它仍然有效。我有什么理由不能这样做吗?
我没有 Spring4D 可以测试,但我猜测发生的事情类似于 this,其中 Delphi 的语法规则允许在执行时省略括号不带参数的方法会引入歧义。在这里,你在哪里:
TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer);
...编译器无法确定您是否打算直接传递方法 MyComparer
(给采用方法指针类型 TComparison<T>
的 CreateSortedObjectList
的重载)或者您是否打算执行该方法并传递 return 值。在这种情况下你想做后者,所以你可以对编译器明确并包含括号
TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer());
我不确定这是一般性问题还是因为 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 Not enough actual parameters
然而,在没有任何参数或指定了所有参数的情况下,它仍然有效。我有什么理由不能这样做吗?
我没有 Spring4D 可以测试,但我猜测发生的事情类似于 this,其中 Delphi 的语法规则允许在执行时省略括号不带参数的方法会引入歧义。在这里,你在哪里:
TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer);
...编译器无法确定您是否打算直接传递方法 MyComparer
(给采用方法指针类型 TComparison<T>
的 CreateSortedObjectList
的重载)或者您是否打算执行该方法并传递 return 值。在这种情况下你想做后者,所以你可以对编译器明确并包含括号
TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer());