light log

学んだこととか

Rubyのblockの使い方

はじめに

Ruby基礎の勉強メモ。

JSからRubyに来てみて、Rubyでのブロックというのは、JSでのコールバック関数に相当するものだということは分かったけど、細かい所でよくわからない部分がいくつかあったので、調べた。

block

基本的なブロックの使い方のみ。

# ブロック付きメソッドの定義
# メソッド内でyieldを使ってブロックを実行
def call_block
  yield 'foo', 'bar'
end

# 呼び出し
call_block do |a, b|
  puts a + ' ' + b
end

# ブロックを渡さず呼び出すとLocalJumpError
# call_block()

# 引数の数が違ってもエラーにならない
call_block do |a|
  puts a
end

# 足りない引数はnil
call_block do |a, b, c|
  p a, b, c
end

# Procオブジェクトをブロックとして渡す
p = proc {|a, b|
  puts 'in proc: ', a, b
}
call_block &p

# Kernel.#lambdaバージョン
# Kernel.#procで作ったProcオブジェクトとはいくつかの場面で挙動が異なる
l = lambda {|a, b|
  puts 'in lambda:', a, b
}
call_block &l

コールバックを複数渡したければ、Procオブジェクトを使う必要がある。

まとめ

とりあえず基本の使い方はわかった。

ProcやMethodと密接に関係してるっぽいので、そのうちその辺といっしょに調査しなおさないと。

やっぱり一冊ちゃんとした本読んだ方がいいかな。。

参考