関数によって返される呼び出しプロシージャ

ポル

これを持っている:

procedure Foo;
begin
end;

function Bar: TProcedure;
begin
  Result := Foo;
end;

以下をコンパイルします。

var
  tmp: TProcedure;
begin
  tmp := Bar();
  tmp();

...しかし、以下はDelphiでコンパイルされません。

Bar()();

この「制限」には理由がありますか?DOESBar()();パスカルのいくつかの他の「味」に構文コンパイル?ですがBar()();、いくつかの他のコンテキストでコンパイル構文?

デビッド・ヘファーナン

言語の文法に制限はないと思います。ステートメントBar()()は有効である必要があります。したがって、これは古いバージョンのDelphiのコンパイラのバグであると思います。このプログラムはDelphi2010以降でコンパイルされます。

{$APPTYPE CONSOLE}

uses
  SysUtils;

procedure Foo;
begin
end;

function Bar: TProcedure;
begin
  Result := Foo;
end;

begin
  Bar()();
end.

コンパイラのバグがDelphi2010の前に修正された可能性は十分にあります。それは、私が渡さなければならないバージョンです。バグはDelphi7にまだ存在し、Delphi 2010で修正されているようです。したがって、バグはこれら2つのバージョンの間のどこかで修正されているようです。

アップデート1

Marcoは、FreePascalコンパイラがを受け入れると報告していますBar()()

アップデート2

Rudyはいくつかのテストを行い、バグがD2007にまだ存在していることを報告しているため、修正はD2009とD2010のいずれかでした。私の本能は、Embarcaderoが匿名メソッド機能を追加するときに問題を自分で発見し、それが修正が行われるきっかけになったと言っています。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

出力値によって関数内のストアドプロシージャを呼び出し、この値を取得して返す方法は?

分類Dev

トリガーによって呼び出されるプロシージャでCOMMITを使用する方法

分類Dev

Bokeh TextInputウィジェットのコールバック関数呼び出しによって返された結果をキャプチャするにはどうすればよいですか?

分類Dev

DB2のストアード・プロシージャー内で呼び出されたストアード・プロシージャーによって返される結果セットを操作する方法

分類Dev

マルチプロセッシングによって呼び出された関数がメッセージを出力しないのはなぜですか?

分類Dev

Perlクロージャによって参照によって返されるサブを呼び出すにはどうすればよいですか?

分類Dev

関数によって呼び出されたプログラムにPowerShell関数引数を追加します

分類Dev

C関数によって呼び出されるHaskellコールバック関数でスローされるHaskell例外をキャッチする方法は?

分類Dev

Linux x86-64関数呼び出しによって保持されるレジスター

分類Dev

分離タイプは呼び出し元のプロシージャによって上書きされますか?

分類Dev

selectで呼び出された関数によって返されたテーブルをマージするにはどうすればよいですか?

分類Dev

ストアドPL / SQLプロシージャを使用してパッケージ関数を呼び出すにはどうすればよいですか?

分類Dev

ストアドプロシージャとは別のデータベースサーバーに格納されているSQL関数を呼び出す

分類Dev

RTTIメソッド呼び出しによって返される関数参照を使用する

分類Dev

Cからluaスクリプトによって返される関数を呼び出す

分類Dev

ビューによって呼び出された関数でHTTP応答を返します

分類Dev

PowerShell関数:参照によって呼び出されるハッシュ?

分類Dev

いいえ。SQL Server ReportingServicesのストアドプロシージャによって返される行の数

分類Dev

メンバー関数によって返されるベクトルで開始と終了を呼び出す

分類Dev

VBAを使用したネームマネージャー-マクロ呼び出しと関数呼び出しで異なる応答が返される

分類Dev

「ORA-29532 Java呼び出しがキャッチされないJava例外によって終了しました」なしでJavaストアドプロシージャからエラーを発生させる

分類Dev

値によってキャプチャされた関数オブジェクトであるビジターを使用してラムダ内でstd :: visitを呼び出す方法

分類Dev

Fortranは、プロシージャ呼び出しによって派生型を選択します

分類Dev

リフレクションによって得られたクロージャー関数を呼び出す方法は?

分類Dev

partail関数を返す関数によってオーバーロードされた関数を呼び出す方法

分類Dev

partail関数を返す関数によってオーバーロードされた関数を呼び出す方法

分類Dev

親関数がループ内で呼び出された場合、親関数からクロージャーに渡される引数は、コピーされたゴルーチンとしてコピーされますか?

分類Dev

LoopingCallによってスケジュールされた関数の呼び出し数を設定するにはどうすればよいですか?

分類Dev

別の関数によって呼び出されたサブプロセスの例外をキャッチします

Related 関連記事

  1. 1

    出力値によって関数内のストアドプロシージャを呼び出し、この値を取得して返す方法は?

  2. 2

    トリガーによって呼び出されるプロシージャでCOMMITを使用する方法

  3. 3

    Bokeh TextInputウィジェットのコールバック関数呼び出しによって返された結果をキャプチャするにはどうすればよいですか?

  4. 4

    DB2のストアード・プロシージャー内で呼び出されたストアード・プロシージャーによって返される結果セットを操作する方法

  5. 5

    マルチプロセッシングによって呼び出された関数がメッセージを出力しないのはなぜですか?

  6. 6

    Perlクロージャによって参照によって返されるサブを呼び出すにはどうすればよいですか?

  7. 7

    関数によって呼び出されたプログラムにPowerShell関数引数を追加します

  8. 8

    C関数によって呼び出されるHaskellコールバック関数でスローされるHaskell例外をキャッチする方法は?

  9. 9

    Linux x86-64関数呼び出しによって保持されるレジスター

  10. 10

    分離タイプは呼び出し元のプロシージャによって上書きされますか?

  11. 11

    selectで呼び出された関数によって返されたテーブルをマージするにはどうすればよいですか?

  12. 12

    ストアドPL / SQLプロシージャを使用してパッケージ関数を呼び出すにはどうすればよいですか?

  13. 13

    ストアドプロシージャとは別のデータベースサーバーに格納されているSQL関数を呼び出す

  14. 14

    RTTIメソッド呼び出しによって返される関数参照を使用する

  15. 15

    Cからluaスクリプトによって返される関数を呼び出す

  16. 16

    ビューによって呼び出された関数でHTTP応答を返します

  17. 17

    PowerShell関数:参照によって呼び出されるハッシュ?

  18. 18

    いいえ。SQL Server ReportingServicesのストアドプロシージャによって返される行の数

  19. 19

    メンバー関数によって返されるベクトルで開始と終了を呼び出す

  20. 20

    VBAを使用したネームマネージャー-マクロ呼び出しと関数呼び出しで異なる応答が返される

  21. 21

    「ORA-29532 Java呼び出しがキャッチされないJava例外によって終了しました」なしでJavaストアドプロシージャからエラーを発生させる

  22. 22

    値によってキャプチャされた関数オブジェクトであるビジターを使用してラムダ内でstd :: visitを呼び出す方法

  23. 23

    Fortranは、プロシージャ呼び出しによって派生型を選択します

  24. 24

    リフレクションによって得られたクロージャー関数を呼び出す方法は?

  25. 25

    partail関数を返す関数によってオーバーロードされた関数を呼び出す方法

  26. 26

    partail関数を返す関数によってオーバーロードされた関数を呼び出す方法

  27. 27

    親関数がループ内で呼び出された場合、親関数からクロージャーに渡される引数は、コピーされたゴルーチンとしてコピーされますか?

  28. 28

    LoopingCallによってスケジュールされた関数の呼び出し数を設定するにはどうすればよいですか?

  29. 29

    別の関数によって呼び出されたサブプロセスの例外をキャッチします

ホットタグ

アーカイブ