Rubyの本読書会 第五回 レポート

参加してきました。あt(ry

  • 3月17日追記

なんとか時間を調整して参加。
来月からはいよいよ参加がきびしくなるかな。

今回はなんとゲストとして後藤裕蔵さんも参加。
#Rubyは、Railsから本腰をいれて勉強し始めたけど、実はたのしいRubyの初版は持ってたり。

第6章 「さらにメソッドについて」から。
ページ数にしてたったの6ページだったので早くおわるんじゃないかと
思ってましたが、なんだかんだいっているいとたっぷり2時間近くかかってしまいました。

詳細はそのうちログにあがるの期待するとして(id:Hexaさん記録係乙でした)、
ブロックと、Procオブジェクトと、lambdaについてなんとなくわかったような。
Procオブジェクトには2種類あって、

  • raw proc
    • 最後の引数に&が付いたメソッドにブロックを渡す。
    • ブロック付きで、Proc.newを呼び出す。
  • lambda
    • ブロック付きで、Kernel.lambdaを呼び出す。
    • ブロック付きで、Kernel.procを呼び出す(非推奨)。

機能の違いは、

  • raw proc
def call_rowproc
  rowproc = Proc.new do 
    puts "call row proc"
    return 0
  end
  rowproc.call
  puts "end call_rowproc"
end
call_rowproc

実行結果

call row proc
=> 0
  • lambda
def call_lambda
  l = lambda do 
    puts "call lambda"
    return 0
  end
  l.call
  puts "end call_lamda"
end
call_lambda

実行結果

call lambda
end call_lamda
=> nill

row procだとreturnを処理すると呼び出しもとのメソッドごと終了する。
lambdaは独立したメソッド本体のように振舞うので
returnを実行しても呼び出し元のメソッドの処理に戻るだけ。

処理の流れにかかわる仕様には要注意(by ようさん)

ちなみに脚注にでていた、Conrad Schneikerってだれ?ってのが
気になったので調べたら、まつもとさんの日記がひっかかりました。

終了後のだらだらはパンやおにぎりをほおばりつつ歓談(買出し部隊のみなさん乙です)。
ささださんid:moroさん、ありがとうございました。
参加されたみなさんお疲れ様でした。