【Ruby】パーフェクトRuby 学習感想文 ~余談:ブロック関数とは?理解から自作まで(その2)
ブロックを理解する、続きです。
長くて登録できなかった。
ブロックパラメーターを使ってみる
公式ガイド↓
yield に渡された値はブロック記法において | と | の間にはさまれた 変数(ブロックパラメータ)に代入されます。
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fcall.html#yield
ふむ。やってみよう。
def hoge p "aaa" yield "hoho" p "ccc" end hoge do |x| p x end
■実行結果
"aaa" "hoho" "ccc"
なるほど。
今まで、「ブロックパラメータにはdoの左辺の返り値が入る」と思ってたけど
大いなる勘違いだ!
今まで見てきたブロックを扱うクラスが、そういう風に実装されていただけ、だ。
Fileのコード、
File.open("hoge.txt") do |f| puts f.read end
ここでやっていることは
こういう感じで自分も実装してみよう。
ブロック渡し関数を自作
class Human attr_accessor :name, :age def initialize(name) @name = name @age = 30 end def self.create(name) yield self.new(name) end end Human.create("tanaka") do |hito| p hito.name p hito.age end
■実行結果
"tanaka" 30
やった!出来た!
ポイントは、
ブロック変数が少し分かったぞ!
ありがとう師匠!
ありがとうパーフェクトRubyの作者さん達!