一から勉強させてください( ̄ω ̄;)

最下級エンジニアが日々の学びをアウトプットしていくだけのブログです。

Rubyでクロージャを書いてみる

以前、クロージャについてという記事を書きました。

このときはJavaScriptクロージャってどうやって書くの的な話だったのですが、今回はRubyでどうやって書くの的なことを書きたいと思います。

Procを使う

RubyにはProcオブジェクトがあるので、こいつを利用してやればクロージャ的な動きは楽に作れるんじゃないかと思われます。

以前JavaScriptで書いた

function outer(){
  var a=0;
  function inner(){ 
    a++;
    console.log(a); 
  }
  return inner; 
}

//outerの返り値をfnに代入
var fn= outer();
fn(); //1と表示される(・∀・)
fn(); //2と表示される(・∀・)
fn(); //3と表示される(・∀・)

Rubyで書き直してみます。

こんな感じでしょうか。

def outer
  a = 0
  inner = Proc.new do
    a += 1 #Rubyではインクリメント演算子は使えないorz
    p a
  end
end

fn = outer
fn.call #=> 1と表示される(・∀・)
fn.call #=> 2と表示される(・∀・)
fn.call #=> 3と表示される(・∀・)

こんな感じでRubyではProcを使って簡単に書けました。実行した時のaの値がちゃんと参照されています。

まとめ

こんな感じでRubyでも比較的簡単にクロージャが書けました。Procを使ったり、インクリメント演算子が使えなかったり。言語によってこのような違いがあるのもおもしろいですね。