无法在Spring4D中将默认参数值与比较器一起使用

时间:2018-10-10 14:34:52

标签: delphi delphi-10.2-tokyo 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实际参数不足

但是,没有任何参数或指定了所有参数都可以使用。我为什么不能这样做?

1 个答案:

答案 0 :(得分:4)

我没有要测试的Spring4D,但我猜测发生的事情类似于this,在执行不带参数的方法时,Delphi的语法规则允许省略括号,这会引起歧义。在这里,您可以在这里进行操作:

<!doctype html>
<html>

  <head>
	
   
  </head>



  <body>
    <div id="tasks">
      <div>
      	<button>Finish</button>
      	<span>Finish web tasks</span>
      </div>
      <div>
      	<button>Finish</button>
      	<span>Go to gym</span>
      </div>
      <div>
      	<button>Finish</button>
      	<span>Clean home</span>
      </div>
      <div>
      	<button>Finish</button>
      	<span>Start project</span>
      </div>
      <div>
      	<button>Finish</button>
      	<span>Prepare to calculus</span>
      </div>
    </div>
    <script type="text/javascript">
    	var button = document.getElementsByTagName("button");
    	for(var i = 0; i<button.length;i++){
button[i].addEventListener('click', function() {
    				if(this.parentElement.style.textDecoration == 'line-through'){
    					this.parentElement.style.textDecoration = 'none';
    				} else {
              this.parentElement.style.textDecoration = "line-through";
            }
    		});
    }
    </script>
  </body>

</html>

...编译器无法确定您是要直接传递方法 TCollections.CreateSortedObjectList<TMyClass>(TMyClass.MyComparer); (还是传递给MyComparer的重载,该重载采用方法指针类型为CreateSortedObjectList),还是无法确定?您的意思是执行该方法并传递返回值。在这种情况下,您需要执行后者,因此可以为编译器显式并包含括号

TComparison<T>