タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

Rubyとクロージャに関するkomlowのブックマーク (1)

  • ラムダ(lambda)を使ったアキュムレータ(累積器) - give IT a try

    今読んでる「ハッカーと画家」にこんなRubyのサンプルコードが載ってました。 def foo(n) lambda {|i| n += i} end の解説によるとこれは「数nを取り、『数iを取ってnをiだけ増加させ、その増加した値を返す関数』を返す関数」というアキュムレータ(累積器)だそうです。 を読んだだけではピンとこなかったので実際に動かしてみました。 def foo(n) lambda {|i| n += i} end x = foo 1 p x.call 1 p x.call 2 p x.call 3 p x.call 0 p x.call -1 実行結果は以下の通りです。 2 4 7 7 6 これを見てどういうプログラムか分かりましたか? 僕は実行結果を見てもしばらく意味がわかりませんでした・・・。 が、よく見るとこういうことだったんですね。 x = foo 1 #初期値が1

    ラムダ(lambda)を使ったアキュムレータ(累積器) - give IT a try
  • 1