このブログは証明できない。さん
■[Ruby]Rubyのblock、Proc、lambdaを理解する
http://d.hatena.ne.jp/shunsuk/20090101/1230816826
blockとProcの唯一の違いは、blockは保存できないということです。
■[Ruby]Rubyのblock、Proc、lambdaを理解する
http://d.hatena.ne.jp/shunsuk/20090101/1230816826
blockとProcの唯一の違いは、blockは保存できないということです。
トラックバック頂きました。なるほどー勉強になります。
んー。そうするとさらに疑問が出てきますね。Block が渡された関数内ではすでに Proc オブジェクト。ブロックはいつ Proc オブジェクトになるのかなぁ。ブロックを受け取る与え値に & が要るし、ary.each &a とすればOKとのことですし・・・。& かな。と、仕様書頼るかぁw(10/04/10)
んー。そうするとさらに疑問が出てきますね。Block が渡された関数内ではすでに Proc オブジェクト。ブロックはいつ Proc オブジェクトになるのかなぁ。ブロックを受け取る与え値に & が要るし、ary.each &a とすればOKとのことですし・・・。& かな。と、仕様書頼るかぁw(10/04/10)
とのことですが保存出来るんでは?
と、言いつつ ruby は rail をインストールしてちょこちょこっと弄っただけなので全然分かってない。つらつらマニュアル見るとプログラマの欲望を詰めに詰め込んだ言語ですねー。いや、すばらしいw 引き合いが少ないので使えないのが残念。
例えば、こんな事ではダメ???
def ref(&block)
block
end
a = ref {
puts "ok!"
}
a.call # ok!
puts a.class # Proc class
block
end
a = ref {
puts "ok!"
}
a.call # ok!
puts a.class # Proc class
ブロックを返せばどんなでもいいけども。a は ブロックへの参照だし、a のクラスを見ると Proc になってる。ブロックは単純に Proc クラスのインスタンスって考え方じゃダメなん?もちろん、使いまわし出来る。
def evl1(block)
block.call
end
evl1 a # ok!
block.call
end
evl1 a # ok!
ただ、ary.each a なんて感じで使いたいけど・・・。このままだとエラーになる。
多分、なんとか出来るんだろーけど。知識も経験も圧倒的に不足してるw
この記事へのコメント
とすると、OKですよ。
なるほど。明示すればいいんですね。
ひょっとして・・・。この方法は、ブロックだけじゃなさそうですね。