6

我对 Delphi 很陌生,我正在尝试使用 DEHL Collections 库。(请参阅http://code.google.com/p/delphi-coll/)从 IDE 的角度来看,我遇到了一些麻烦。它可以正确编译和运行,但是在我使用 HashSet 库的任何地方,Delphi XE 都会显示错误。最大的不满是阻止我使用代码完成。

我得到错误的第一个位置是在对象声明中:

uses
  SysUtils, Windows, Collections.Base, Collections.Sets, Collections.Lists,
  adscnnct, adstable,
  uOtherClass;

type
  OneClass = class(OtherClass)
    private
      _bad: THashSet<string>;   // THashSet underlined
      _good: TList<string>;     // No problems
  end;

错误状态:“类型参数与约束不匹配”

我不认为它是配置,因为我可以很好地使用 TList,但我是这样设置的:我已将库复制到 Projects/Libs/DeHLCollections/Library 并将库编译到 Projects/Libs/bin。我已经在我的全局库路径中包含了 bin 目录,它可以编译和运行。我也尝试向其中添加所有内容(/libs、/DeHLCollections、/Library),希望 IDE 能够帮助我,但它似乎没有帮助。

无论如何要解决这个问题,还是我只需要处理它?

使用 DeHL Collections 版本 1.1.1.119

4

1 回答 1

6

欢迎使用泛型负载代码的麻烦。DeHL 和泛型在 Delphi XE 中比在任何以前的 Delphi 版本中工作得更好,但这与它“没有任何问题”不同。我遇到的问题和你的完全一样。

我的观点是,DeHL 显示出由 Delphi 大师级程序员编写的所有迹象,并且在某些方面它是一件美丽的事情。它也是巨大痛苦的来源,这不是它自己的过错。

Delphi 包含的不是一两个,而是至少三个(可能是四个?)独立的解析器,包括完整的编译器解析器,以及一些用于错误洞察(甚至在构建之前看到的错误)和代码的 IDE 解析器完成数据解析器。对于泛型,每种语言都有不同的语言支持限制。也许可以编写 DeHL 来避免所有各种 Delphi 解析器的解析器问题。TSomething<TSomething<ISomethingElse>,TBar<IFoo>>我还没有看到任何写过说明限制的指南,但是如果表单中的复杂类型声明破坏了其中的几个解析器,我不会感到惊讶。

如果你打算大量使用泛型,你不妨关闭 Code Completion 和 Error Insight。您可能还想经常保存,并准备好遇到很多编译器问题。并且不要尝试编译泛型繁重的代码并将其放入包中。在编写基于泛型的代码时,我经历了很多 URW 和 AV(内部编译器故障)。我发现 Delphi 编译器团队非常擅长修复报告的任何问题,但是当我限制自己使用 Delphi 附带的 Generics.Collections 而不使用其他基于泛型的代码时,泛型对我来说确实是最稳定的。似乎可以使用泛型功能编写东西,IDE 和双向工具以及代码完成尚未完全准备好处理。这意味着,

话虽如此,来自 Subversion 的最新 DeHL 源代码对我来说工作正常,并且构建和运行都没有错误,但是整个 DeHL 集合的最新源 ZIP 对我来说有问题。

我希望在接下来的几个 Delphi 版本中,无论发现什么问题(DeHL 似乎是一个突破界限的好地方,这也是我非常喜欢它的原因之一),并且您不会想知道为什么重泛型会破坏您的 IDE 功能,因为它们都会再次工作。

于 2011-07-19T23:41:43.650 回答