タグ

クロージャに関するbigbroのブックマーク (17)

  • PHP: 無名関数 - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    PHP: 無名関数 - Manual
    bigbro
    bigbro 2012/05/17
    「無名関数はクロージャとも呼ばれ」 PHPでは同一視してるのか
  • PHP5.3で即時関数

    JavaScriptではよく使う即時関数(function(){ /*...*/ })()ですが、PHPもバージョン5.3からクロージャがサポートされ、原理的には書けるはずなので試してみました。 current(array(function(){ /* * このブロックは擬似的にブロックスコープを持つ * */ }))->__invoke(); echo current(array(function($a, $b){ return $a + $b; }))->__invoke(1, 2);// 3 …すっげー見づらいですが、一応解説。 function(){ }をリファレンスにする PHPの関数や配列、オブジェクトといったものは、一度変数に代入しないとうまく起動してくれません。しかし関数の戻り値はメソッドをつなげることができます。anatooさんのHackが有名ですね。 function

    PHP5.3で即時関数
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • ハタさんのブログ : javascriptで一度しか呼べない関数を作る

    Singleton Function(なわけでもないけど)を作ってみるテスト var hoge = function (){ if(arguments.callee.done === true){ return; } alert("hoge"); arguments.callee.done = true; }; var foo = function (message){ var callee = arguments.callee; if(callee.done === true){ return callee.mesg; } callee.mesg = message; callee.done = true; return message; }; hoge(); // hoge hoge(); foo('hello'); alert(foo('world')); // hello と思った

  • Closureって呼ぶな!(PHP5.3 無名関数)

    "無名関数は、現在は Closure クラスで実装されています。 これはあくまでも内部実装の問題であり、この事実に依存したコードを書いてはいけません。 " http://bit.ly/eHO3AyWed Feb 02 00:25:56 via Echofonあほむ ahomu うーむ,動くけどダメっていうパターン. サンプルコード $Hoge = new Hoge(); $Hoge->hogehoge(function() { return 'hogehoge'; }); class Hoge { public function hogehoge(Closure $func) { echo $func(); // 'hogehoge' } } 上記のようなコードで引数の型っぽく指定できるが,Closureというクラス名に依存すんな,ってことなので実際にはNG. if ( $func ins

    Closureって呼ぶな!(PHP5.3 無名関数)
  • スクリプト言語間における「lexical closure」の違い - PHPの場合

    via. スクリプト言語間における「lexical closure」の違い、それともプログラムの違い? – karasuyamatenguの日記 PHPも5.3からクロージャがあります。クロージャの指定の仕方によって挙動が異なりますが、PHPで書くと以下のようになります。 ループでiを0から4まで回す ループブロック内で: iを埋め込んだlexical variable、’localvar’を定義。 localvarを参照したclosureをリストに追加。 5つのclosureの値をプリント スクリプト言語間における「lexical closure」の違い、それともプログラムの違い? – karasuyamatenguの日記 各クロージャの$localvarが独立しているパターン。 foo0 foo1 foo2 foo3 foo4 各クロージャで$localvarを共有しているパターン。(

  • クロージャ入門物語 - 三等兵

    なんかクロージャを説明している文章をサイで読んでモゾモゾしつつクロージャを成すために激動の時代を生き抜いた熱い物語である! 完!sandai先生の次回作にご期待ください! 分岐 まずは生真面目にやってみる! http://dqn.sakusakutto.jp/2009/01/javascript_5.html わからなかった・・・ とりあえず書くんだ同志よ! がむしゃらにクロージャのコードを書く こっちでもクロージャのコード書く!よっしゃー突貫じゃー!!! function soto() { var num = 0; } 次。 function soto() { var num = 0; function naka() { num+=1; alert(num); // 数値を確認するためのalert } return naka; } var func = soto(); 出来上がり。

    クロージャ入門物語 - 三等兵
  • クロージャと高階関数

    Javascriptには関数式と呼ばれるものがあります。関数式は数値や文字列のようにプログラムにリテラルとして書かれた関数です。

  • まつもと直伝 プログラミングのオキテ 第5回(1)

    今回はRubyの特徴的な機能である「ブロック」という構文について解説しましょう。Rubyでいうブロックとは「メソッド呼び出し時に追加できるコードの塊」を意味します。 例えば,配列の各要素に対する繰り返し処理を進める次のコードを見てください。 ary.each {|x| puts x} この例ではかっこ(ブレース)に囲まれた領域{|x| puts x}がブロックに相当します。これだけで,「各要素を変数xに代入した上で,putsを実行する」という意味になります。 Rubyにあるブロックは,Rubyオリジナルの機能ではありません。他の言語に古くから存在していたものを文法的にアレンジしたものです。ブロック機能の発想の基になった他言語の機能も含めて解説しましょう。 関数を引数に取る高階関数 Rubyのブロック機能は原理的には「高階関数」と呼ばれるものと同じです。高階関数とは「関数を引数に取る関数」を

    まつもと直伝 プログラミングのオキテ 第5回(1)
  • Perl5.10.0ではクロージャをネストしたときのメモリリークが解消されているみたい - sub usuilog;

    Perl5.8まではクロージャをネストした場合にメモリーリークが発生するという問題がありましたが、5.10.0では解消されているようです。 例えば以下のようなソースを実行すると use strict; use Devel::Leak::Object qw(GLOBAL_bless); package Foo; sub new { my $class = shift; return bless { id => shift }, $class; } sub DESTROY { my $self = shift; print "Destroy @{[$self->{id}]} $self\n"; } package main; sub main ($) { my $j = shift; print "# MAIN BLOCK START\n"; my $foo = Foo->new( $j );

    Perl5.10.0ではクロージャをネストしたときのメモリリークが解消されているみたい - sub usuilog;
  • [JavaScript] 猿でもわかるクロージャ超入門 まとめ - DQNEO起業日記

    クロージャとは クロージャは、言葉で説明するのが大変難しい概念です。 あなたは、自転車の乗り方を、口だけで説明できるでしょうか? あなたは、螺旋(らせん)の形を、言葉だけで説明できるでしょうか? ずばり、できないでしょう。 しかし、自転車に乗ることはできますし、針金で螺旋の形を作ることはできるでしょう。 「クロージャ」もこれと同じです。 だから、Wikipediaのこんな解説を見ても落ち込まないでください。 クロージャ (クロージャー、Closure) は、プログラミング言語において引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数のことである。 理解できないですよね? 私もそうでした。 クロージャを既に知っている人にしか、この文章は理解できないでしょう。 クロージャを作るのは難しくない しかし、説明するのは難しくても、作るのは意外と簡単。それが

  • クロージャ - メモっぽい日記

  • クロージャが理解できない人のための超クロージャ入門。 - 絶品ゆどうふのタレ

    なんだか全然違う事を考えていて、おもむろにクロージャまで考えが到達してハッと喉のつかえが取れたのでメモ。 タイトルは釣りです。嘘ですちゃんと説明してます。自分なりに。 あとからタイトルが×「超クロージャ入門」→○「クロージャ超入門」にしなきゃいけなかったと気付いたのは秘密。 前座 理解したつもりでいながらも、自分の中で整理しきれなかった項目がクロージャでした。 で、ついさっきやっと、難しく考えすぎていたなぁと気づいたので、自分として理解した事をメモがてら説明しておこうと考えました*1。 といっても、目新しい説明は何も書いてないです。小難しい理屈とか、実装を先に見てしまうからわけわからなくなるんだと思ったので、間違っているかも知れないぐらい大雑把な説明*2と、得られる結果だけを先に書くという説明手法で書いたというだけです。 こういうエントリって、もっといい説明の劣化物を生産することになるのは

    クロージャが理解できない人のための超クロージャ入門。 - 絶品ゆどうふのタレ
  • 関数、オブジェクト、クロージャ - FAX

    (thanks to id:koyachi、del.icio.us/rtk2106) OOPとFPと。関数、オブジェクト、クロージャの使い分けについて考えます。 関数型が良いのか、オブジェクト指向が良いのか、知りたいと思っていました。色々なページを読み、現時点で一応の答えを得ました。 カウンタを例にして、関数、スコープ、オブジェクト、クロージャの順に見て行きます。関数関数は処理です。入力と出力があります。関数型プログラミングでは、関数同士の入力と出力を連結しプログラムが構成されます。 var current = 0; function next(v){ return v + 1 } function previous(v){ return v - 1 } ok( 1 == ( current = next(current) ) ); ok( 2 == ( current = next(cu

    bigbro
    bigbro 2009/03/06
    オブジェクトはデータに処理がくっついたもの、クロージャは処理にデータがくっついたもの。
  • クロージャ - Wikipedia

    クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念である。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。関数とそれを評価する環境のペアであるともいえる。この概念は少なくとも1960年代のSECDマシンまで遡ることができる。まれに、関数ではなくとも、環境に紐付けられたデータ構造のことをクロージャと呼ぶ場合もある。クロージャをサポートする言語によるプログラミングでは、単に関数の中に関数を定義することができるだけでなく、その際に、外側の関数(エンクロージャ)で宣言された変数を暗黙的に内側の関数に取り込んで操作することができる。主な利点としてはグローバル変数の削減やコールバック関数記述の簡素化が挙げられる。 典型的に

  • lethevert is a programmer - 晴れ - Delphi : クロージャ(完成版)

    クロージャというのは、関数内関数などで、関数が定義されたところの環境(ローカル変数やローカル関数)への参照を維持した関数オブジェクトを作成する機能のことです。 過去の記事 [id:lethevert:20060106:p2] - ファンクタの作成 [id:lethevert:20060107] - クロージャの原案 [id:lethevert:20060109:p2] - fix関数によるフィボナッチ関数の作成 クロージャの型について クロージャの型について、どのような型が一番適切なのかをいろいろ考えていたのですが、結論が出ました。 原案では、「TObject -> TObject」型で実装し、後に「Pointer -> Pointer」に変更したのですが、結論として、「Pointer -> ()」型がもっとも汎用的だという結論になりました。Delphiの型システムとメモリ管理の特徴を考え

    lethevert is a programmer - 晴れ - Delphi : クロージャ(完成版)
  • JavaScriptの巧い書き方 - Archiva

    Make a note of it: Web tech, montaineering, and so on. Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。 Webに言語は数あれど、特に玉石混淆の激しいJavascriptの書き方について纏めてみた。間違い指摘大歓迎! 発端はYahoo!の Eric Miraglia による、YUI 式モジュールの作り方をまとめた記事。ざっくりまとめると、以下の手順になる。 YAHOO.myProject.myModule = function () { //"private" variables: var myPrivateVar = "I can be accessed only from within YAHOO.myProject.myModule."; //"private" m

  • 1