D言語の関数オブジェクトとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > D言語の関数オブジェクトの意味・解説 

D言語の関数オブジェクト

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/03 01:18 UTC 版)

関数オブジェクト」の記事における「D言語の関数オブジェクト」の解説

D言語には関数オブジェクトとして、デリゲートクロージャ両方がある。 bool find(T)(T[] haystack, bool delegate(T) needle_test) { foreach ( straw; haystack ) { if ( needle_test(straw) ) return true; } return false;}void main() { int[] haystack = [345, 15, 457, 9, 56, 123, 456]; int needle = 123; bool needleTest(int n) { return n == needle; } assert(find(haystack, &needleTest));} D言語におけるデリゲートクロージャ違いは、コントロール変数スコープから一旦抜けても、変数寿命続いているか、そうでないかである。コンパイラにより保守的に自動的に決定される(後から変数参照する可能性があればクロージャとする)。 D言語は、関数リテラルラムダ式サポートしている。 void main() { int[] haystack = [345, 15, 457, 9, 56, 123, 456]; int needle = 123; assert(find(haystack, (int n) { return n == needle; })); assert(find(haystack, (int n) => n == needle));} コンパイラインライン化できるようにするため(上記参照)、関数オブジェクトC++形式演算子オーバーロード用いて宣言するともできる。しかし、D言語ではテンプレート引数として関数等を渡す手法一般的である。 bool find(T,F)(T[] haystack, F needle_test) { foreach ( straw; haystack ) { if ( needle_test(straw) ) return true; } return false;}void main() { int[] haystack = [345, 15, 457, 9, 56, 123, 456]; int needle = 123; struct NeedleTest { int needle; this(int n) { needle = n; } bool opCall(int n) { return n == needle; } } assert(find(haystack, NeedleTest(needle)));}

※この「D言語の関数オブジェクト」の解説は、「関数オブジェクト」の解説の一部です。
「D言語の関数オブジェクト」を含む「関数オブジェクト」の記事については、「関数オブジェクト」の概要を参照ください。

ウィキペディア小見出し辞書の「D言語の関数オブジェクト」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「D言語の関数オブジェクト」の関連用語

D言語の関数オブジェクトのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



D言語の関数オブジェクトのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの関数オブジェクト (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS