method_missingの紹介(2013 3Qカジュアル勉強会資料)

2,788 views

Published on

2013年3Qにやったカジュアル勉強会で使った資料。method_missingについて軽く話したので、一応資料を提出

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,788
On SlideShare
0
From Embeds
0
Number of Embeds
1,525
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

method_missingの紹介(2013 3Qカジュアル勉強会資料)

  1. 1. Rubyでやる メタプログラミング 存在しないメソッドを呼んでやるよ
  2. 2. ● メタプログラミングとは ● 様々なメタプログラミング ● method_missingの力 アジェンダ
  3. 3. メタプログラミングとは
  4. 4. メタプログラミングとは ● メタプログラミングとは、コードを記述するコー ドを記述する事。 ● Rubyの場合、存在しないメソッドやクラスを実 行時に生成したりできる→魔術のようだ ● エレガントである一方、理解しずらいところが ある。コードが追いにくい
  5. 5. 様々なメタプログラミング技法
  6. 6. ● 動的メソッド ● method_missging(ゴーストメソッド) ● オープンクラス ● フラットスコープ ● 特異メソッド/特異クラス ● eval などなど 様々なメタプログラミング技法
  7. 7. method_missingの力
  8. 8. ● 存在しないメソッドを呼び出した時に、このメ ソッドが実行される ● method_missing(name , *args) ● railsのfind_by_~メソッドで使われている ● 動的プロキシとして使ったりもできる。 method_missing(ゴーストメソッド)
  9. 9. class Man def method_missing(name , *args) puts "#{name} method exec" puts args.join('==') end end @man = Man.new @man.hogehoge('one' , 'two' , 'three') $ hogehoge method exec $ one==two==three
  10. 10. class Man def exec(name , args) puts "#{name} Call" puts "http://hogehoge/api/#{name}/#{args[0] || 'test'} exec" end def method_missing(name , *args) puts "method missing exec" exec name , args end end $ @man = Man.new $ @man.ugo method missing exec ugo Call http://hogehoge/api/ugo/ exec
  11. 11. ● method_missingでキャッチする予定のメソッ ドが継承チェーンの上の方で既に定義され ている場合、method_missingは実行されな い。 ● 処理速度的には、直接呼ぶよりも遅い。 method_missingの注意点
  12. 12. 以上です。

×