6

私はDelphiを初めて使用し、DEHLコレクションライブラリを使用しようとしています。(http://code.google.com/p/delphi-coll/を参照)IDEの観点からは少し問題があります。コンパイルして正しく実行されますが、HashSetライブラリを使用するとDelphiXEでエラーが表示されます。最大の不満は、コード補完を使用できないことです。

エラーが発生する最初の場所は、オブジェクト宣言です。

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ディレクトリを含めて、コンパイルして実行できるようにしました。IDEが私を助けてくれることを期待して、すべて(/ libs、/ DeHLCollections、/ Library)も追加しようとしましたが、役に立たないようです。

とにかくこれを修正するために、または私はそれに対処する必要がありますか?

DeHLコレクションバージョン1.1.1.119の使用

4

1 に答える 1

6

Genericsを含むコードの使用に関する問題へようこそ。DeHLとジェネリックスは、Delphi XEでは以前のDelphiバージョンよりもはるかにうまく機能しますが、それは「問題がない」ことと同じではありません。私が経験する問題はあなたとまったく同じです。

私の意見では、DeHLは、マスターdelphiプログラマーによって書かれたすべての兆候を示しており、それはある意味で美しいものだと思います。それはまた、それ自体のせいではなく、大きな苦痛の源でもあります。

Delphiには、1つまたは2つではなく、完全なコンパイラパーサーを含む少なくとも3つ(おそらく4つ?)の個別のパーサーと、Error Insight(ビルド前でも表示されるエラー)やコードなどに使用されるいくつかのIDEパーサーが含まれています。完了データパーサー。ジェネリックに関しては、それぞれに異なる言語サポートの制限があります。おそらく、さまざまなDelphiパーサーすべてでのパーサーの問題を回避するためにDeHLを作成できる可能性があります。制限を示すガイドはこれまでに作成されたことがありませんが、フォーム内の複雑な型の宣言TSomething<TSomething<ISomethingElse>,TBar<IFoo>>がそれらのパーサーのいくつかを超えても驚かないでしょう。

Genericsを非常に頻繁に使用する場合は、コード補完とエラーインサイトをオフにすることもできます。また、頻繁に保存して、コンパイラの問題をたくさん経験する準備をしておくこともできます。また、ジェネリックスを多用するコードをコンパイルしてパッケージに入れようとしないでください。ジェネリックスベースのコードを書くとき、私は多くのURWとAV(内部コンパイラー障害)を経験しました。Delphiコンパイラチームは報告されたものを修正するのに優れていると思いますが、Delphiに付属するGenerics.Collectionsの使用に制限し、他のジェネリックベースのコードを使用しない場合、Genericsは私にとって本当に最も安定しています。ジェネリック機能を使用して何かを書くことは可能であるように思われます。IDEと双方向ツール、そしてコード補完はまだ完全に処理する準備ができていません。つまり、

そうは言っても、Subversionの最新のDeHLソースは私にとっては問題なく動作し、エラーなしでビルドおよび実行できますが、DeHLコレクション全体の最新のソースZIPには問題がありました。

Delphiの今後数回のリリースで、見つかった問題はすべて修正されると思います(DeHLは限界を押し上げるのに最適な場所のようです。それが、私がDelphiの大ファンである理由の1つです)。ヘビージェネリックがIDE機能を壊す理由は不思議ではありません。なぜなら、それらはすべて再び機能するからです。

于 2011-07-19T23:41:43.650 に答える