【问题标题】:Can't use default parametr values with comparer in Spring4D无法在 Spring4D 中将默认参数值与比较器一起使用
【发布时间】:2019-03-15 12:14:26
【问题描述】:

我不确定这是一些一般性问题还是因为 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 实际参数不够

但是,如果没有任何参数或指定所有参数,它就可以工作。我有什么理由做不到吗?

【问题讨论】:

    标签: delphi delphi-10.2-tokyo spring4d


    【解决方案1】:

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

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

    ...编译器无法确定您是要直接传递方法 MyComparer(传递给采用方法指针类型 TComparison&lt;T&gt;CreateSortedObjectList 的重载)还是要执行该方法并传递返回值。在这种情况下,您想要执行后者,因此您可以明确编译器并包含括号

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多