なぜ一般的な匿名メソッドに互換性のないタイプがあるのですか?

狂った

勉強の過程で、ニック・ホッジズの「CodinginDelphi」の本を使います。私はDelphi2010を使用しています。

匿名メソッドに関する章で、彼は.NETの偽造に関する非常に興味深い例を提供していますusing例をコンパイルしようとすると、コンパイラからエラーが発生します。結果を得るために私を助けてください。

私のクラス:

type
  TgrsObj = class
    class procedure Using<T: class>(O: T; Proc: TProc<T>); static;
  end;

implementation

{ TgrsObj }

class procedure TgrsObj.Using<T>(O: T; Proc: TProc<T>);
begin
  try
    Proc(O);
  finally
    O.Free;
  end;
end;

上記のコードを使用する方法は次のとおりです。

procedure TForm4.Button1Click(Sender: TObject);
begin
  TgrsObj.Using(TStringStream.Create,
    procedure(ss: TStringStream)
    begin
      ss.WriteString('test string');
      Memo1.Lines.Text := ss.DataString;
    end);
end;

コンパイラエラー:

[DCC Error] uMain.pas(36): E2010 Incompatible types: 'TProc<ugrsObj.Using<T>.T>' and 'Procedure'
ステファン・グリエンケ

これは、Delphiの型推論が不十分なためです。実際にTは最初のパラメーターから推測できますが、残念ながら、コンパイラーは完全に一致する2番目のパラメーターについては満足していません。

次のようにtypeパラメーターを明示的に指定する必要があります。

TgrsObj.Using<TStringStream>(TStringStream.Create, procedure(ss: TStringStream)
  begin
    ss.WriteString('test string');
    Memo1.Lines.Text := ss.DataString;
  end);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

一般的な戻り値の型メソッドで互換性のないタイプ(ジャワ)

分類Dev

タイプに互換性がないのはなぜですか?

分類Dev

なぜ比較メソッドが例外をスローするのですか-比較メソッドはその一般規約に違反しています!

分類Dev

オーバーライド時のメソッド特殊化のためにパラメータータイプが一般化されているのはなぜですか?

分類Dev

メソッドを一般的なものに変換する

分類Dev

std :: mapがキータイプとして互換性のあるタイプを常に許可するとは限らないのはなぜですか?

分類Dev

タイプ(String、Int、Boolean)のオーバーライドメソッド=> Doubleに互換性のないタイプがあります

分類Dev

List <T> .AddRangeメソッドを一般的なメソッドにすると、パフォーマンスが低下するのはなぜですか?

分類Dev

正しい構造のTypescript配列が、一見互換性のあるタプルに割り当てられないのはなぜですか

分類Dev

セレクターinitでメソッドをオーバーライドすると、Swiftで互換性のないタイプになります

分類Dev

セレクター 'touchesBegan:withEvent:'でメソッドをオーバーライドすると、互換性のないタイプ '(NSSet、UIEvent)->()'になります

分類Dev

なぜこの例外java.lang.IllegalArgumentException:比較メソッドがその一般規約に違反しているのですか?

分類Dev

Androidとの互換性がLinuxディストリビューションの一般的な機能ではないのはなぜですか?

分類Dev

Androidとの互換性がLinuxディストリビューションの一般的な機能ではないのはなぜですか?

分類Dev

一般的な意味でアダプタではないのに、SpringJava構成に* Adapterクラスがあるのはなぜですか

分類Dev

コマンドライン引数では一般的であるのに、stdin入力がオプションのような入力を持つことは一般的ではないのはなぜですか?

分類Dev

これらの構造的に類似したタイプに互換性がないのはなぜですか?

分類Dev

データ型に互換性があるにもかかわらず、配列割り当てに互換性がないのはなぜですか?

分類Dev

セレクター「***」でメソッドをオーバーライドすると、互換性のないタイプ「****」が解析されます

分類Dev

静的メソッドへの一般的なタイプ

分類Dev

プロセッサチェックで「ロングモードと互換性がある」と表示されているのに、VMplayerで「互換性がない」と表示されているのはなぜですか。

分類Dev

Wasm GCの設計が、型の同等性、タグ付け、サブタイプ、メソッドなどに対応しているのはなぜですか?

分類Dev

C#でメソッドが呼び出されるたびに別のメソッドを呼び出す一般的な方法はありますか?

分類Dev

テンプレート化されたメソッドを持つネストされた構造体が許可されていないのに、なぜ一般的なラムダが許可されるのですか?

分類Dev

テンプレート化されたメソッドを持つネストされた構造体が許可されていないのに、なぜ一般的なラムダが許可されるのですか?

分類Dev

テンプレート化されたメソッドを持つネストされた構造体が許可されていないのに、なぜ一般的なラムダが許可されるのですか?

分類Dev

ソケットのサブタイプであるSSLSocketにcreate_connectionメソッドがないのはなぜですか?

分類Dev

GETにメソッドは必要ありませんか?もしそうなら、それを書かないのが一般的ですか?

分類Dev

フラッシュメモリドライブのサイズが一般に2の倍数であるのに、ハードディスクドライブのサイズが100の倍数になるのはなぜですか?

Related 関連記事

  1. 1

    一般的な戻り値の型メソッドで互換性のないタイプ(ジャワ)

  2. 2

    タイプに互換性がないのはなぜですか?

  3. 3

    なぜ比較メソッドが例外をスローするのですか-比較メソッドはその一般規約に違反しています!

  4. 4

    オーバーライド時のメソッド特殊化のためにパラメータータイプが一般化されているのはなぜですか?

  5. 5

    メソッドを一般的なものに変換する

  6. 6

    std :: mapがキータイプとして互換性のあるタイプを常に許可するとは限らないのはなぜですか?

  7. 7

    タイプ(String、Int、Boolean)のオーバーライドメソッド=> Doubleに互換性のないタイプがあります

  8. 8

    List <T> .AddRangeメソッドを一般的なメソッドにすると、パフォーマンスが低下するのはなぜですか?

  9. 9

    正しい構造のTypescript配列が、一見互換性のあるタプルに割り当てられないのはなぜですか

  10. 10

    セレクターinitでメソッドをオーバーライドすると、Swiftで互換性のないタイプになります

  11. 11

    セレクター 'touchesBegan:withEvent:'でメソッドをオーバーライドすると、互換性のないタイプ '(NSSet、UIEvent)->()'になります

  12. 12

    なぜこの例外java.lang.IllegalArgumentException:比較メソッドがその一般規約に違反しているのですか?

  13. 13

    Androidとの互換性がLinuxディストリビューションの一般的な機能ではないのはなぜですか?

  14. 14

    Androidとの互換性がLinuxディストリビューションの一般的な機能ではないのはなぜですか?

  15. 15

    一般的な意味でアダプタではないのに、SpringJava構成に* Adapterクラスがあるのはなぜですか

  16. 16

    コマンドライン引数では一般的であるのに、stdin入力がオプションのような入力を持つことは一般的ではないのはなぜですか?

  17. 17

    これらの構造的に類似したタイプに互換性がないのはなぜですか?

  18. 18

    データ型に互換性があるにもかかわらず、配列割り当てに互換性がないのはなぜですか?

  19. 19

    セレクター「***」でメソッドをオーバーライドすると、互換性のないタイプ「****」が解析されます

  20. 20

    静的メソッドへの一般的なタイプ

  21. 21

    プロセッサチェックで「ロングモードと互換性がある」と表示されているのに、VMplayerで「互換性がない」と表示されているのはなぜですか。

  22. 22

    Wasm GCの設計が、型の同等性、タグ付け、サブタイプ、メソッドなどに対応しているのはなぜですか?

  23. 23

    C#でメソッドが呼び出されるたびに別のメソッドを呼び出す一般的な方法はありますか?

  24. 24

    テンプレート化されたメソッドを持つネストされた構造体が許可されていないのに、なぜ一般的なラムダが許可されるのですか?

  25. 25

    テンプレート化されたメソッドを持つネストされた構造体が許可されていないのに、なぜ一般的なラムダが許可されるのですか?

  26. 26

    テンプレート化されたメソッドを持つネストされた構造体が許可されていないのに、なぜ一般的なラムダが許可されるのですか?

  27. 27

    ソケットのサブタイプであるSSLSocketにcreate_connectionメソッドがないのはなぜですか?

  28. 28

    GETにメソッドは必要ありませんか?もしそうなら、それを書かないのが一般的ですか?

  29. 29

    フラッシュメモリドライブのサイズが一般に2の倍数であるのに、ハードディスクドライブのサイズが100の倍数になるのはなぜですか?

ホットタグ

アーカイブ