Your SlideShare is downloading. ×
method_missingの紹介(2013 3Qカジュアル勉強会資料)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

1,907

Published on

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

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

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

No Downloads
Views
Total Views
1,907
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Rubyでやる メタプログラミング 存在しないメソッドを呼んでやるよ
  • 2. ● メタプログラミングとは ● 様々なメタプログラミング ● method_missingの力 アジェンダ
  • 3. メタプログラミングとは
  • 4. メタプログラミングとは ● メタプログラミングとは、コードを記述するコー ドを記述する事。 ● Rubyの場合、存在しないメソッドやクラスを実 行時に生成したりできる→魔術のようだ ● エレガントである一方、理解しずらいところが ある。コードが追いにくい
  • 5. 様々なメタプログラミング技法
  • 6. ● 動的メソッド ● method_missging(ゴーストメソッド) ● オープンクラス ● フラットスコープ ● 特異メソッド/特異クラス ● eval などなど 様々なメタプログラミング技法
  • 7. method_missingの力
  • 8. ● 存在しないメソッドを呼び出した時に、このメ ソッドが実行される ● method_missing(name , *args) ● railsのfind_by_~メソッドで使われている ● 動的プロキシとして使ったりもできる。 method_missing(ゴーストメソッド)
  • 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. 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. ● method_missingでキャッチする予定のメソッ ドが継承チェーンの上の方で既に定義され ている場合、method_missingは実行されな い。 ● 処理速度的には、直接呼ぶよりも遅い。 method_missingの注意点
  • 12. 以上です。

×