我不确定这是否是一些通用问题,还是由于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实际参数不足
但是,没有任何参数或指定了所有参数都可以使用。我为什么不能这样做?
答案 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>