2010年03月28日

ruby:ブロックも保存出来るよーな

このブログは証明できない。さん
■[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)

とのことですが保存出来るんでは?
と、言いつつ ruby は rail をインストールしてちょこちょこっと弄っただけなので全然分かってない。つらつらマニュアル見るとプログラマの欲望を詰めに詰め込んだ言語ですねー。いや、すばらしいw 引き合いが少ないので使えないのが残念。

例えば、こんな事ではダメ???

def ref(&block)
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!

ただ、ary.each a なんて感じで使いたいけど・・・。このままだとエラーになる。
多分、なんとか出来るんだろーけど。知識も経験も圧倒的に不足してるw



posted by HiFa at 01:30 | 🌁 | Comment(2) | TrackBack(1) | へなちょこruby | このブログの読者になる | 更新情報をチェックする
>>> スパムコメントは消してますよん。 お互い無駄な労力は避けましょう。 <<<

この記事へのコメント

ary.each &a
とすると、OKですよ。
Posted by shunsuk at 2010年03月29日 09:29
ありがとうございます!
なるほど。明示すればいいんですね。

ひょっとして・・・。この方法は、ブロックだけじゃなさそうですね。
Posted by Hifa at 2010年03月29日 13:46
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

[Ruby]Rubyでは、すべてがオブジェクト。じゃないよ!
Excerpt: Rubyでは、すべてがオブジェクト。と説明される場合があります。確かに、「1」も「+」もクラス自体もすべてオブジェクトです。ですが、「ほぼ」すべてがオブジェクトであって、すべてではないんです。 例を..
Weblog: このブログは証明できない。
Tracked: 2010-04-07 21:17