代码之家  ›  专栏  ›  技术社区  ›  Triber A. I. Breveleri

不能在Spring4D中对comparer使用默认参数值

  •  2
  • Triber A. I. Breveleri  · 技术社区  · 7 年前

    我不确定这是否是一些一般性的问题,或者是因为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实际参数不足

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

    1 回复  |  直到 7 年前
        1
  •  4
  •   J...    7 年前

    我手头没有Spring4D可供测试,但我猜所发生的事情与 this Delphi的语法规则允许在执行不带参数的方法时省略括号,这就引入了歧义。在这里,您可以:

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

    …编译器无法确定您是否要传递该方法 MyComparer 直接(对 CreateSortedObjectList TComparison<T> )或者是否要执行该方法并传递返回值。在本例中,您希望执行后一种操作,这样就可以对编译器显式并包含括号

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