« Gnuplotの canvas terminalドキュメントの和訳 | Home | 変数を宣言せずに1から100までの和を求める方法 »

March 2, 2012

Rubyのlambdaでクロージャを書いてみた

いつの間にかRubyにlambdaができていたようなので、条件反射でいつものクロージャーを書いてみる。

def makefunction
  x = 0;
  return lambda {
    return x+=1
  };
end

f = makefunction;
x = -100;

p f.call;
p f.call;
p f.call;

p x; 

これを実行すると

1
2
3
-100

すばらしい。 だが、この程度であれば1.8以前でもProcを使えばできたことは秘密だ。

def makeproc
  x = 0;
  return Proc.new {
    return x+=1
  };
end

f = makefunction;
x = -100;

p f.call;
p f.call;
p f.call;

p x; 

$ ruby1.8 clojur.rb
1
2
3
-100

だが、Understanding Ruby Blocks, Procs and Lambdasによると、lambdaとProcには微妙な違いがあるようだ。これは後日。

おまけ。Procの中で、self.callを呼べば無名再帰できるんじゃね?と思ったけれど、Proc.selfはObject型でした。残念。

No TrackBacks

TrackBack URL: http://www.argv.org/~chome/blog/mt-tb.cgi/244

About this Entry

This page contains a single entry by chomy published on March 2, 2012 7:07 PM.

Gnuplotの canvas terminalドキュメントの和訳 was the previous entry in this blog.

変数を宣言せずに1から100までの和を求める方法 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.