• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
method_missingの紹介(2013 3Qカジュアル勉強会資料)
 

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

on

  • 1,401 views

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

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

Statistics

Views

Total Views
1,401
Views on SlideShare
407
Embed Views
994

Actions

Likes
1
Downloads
0
Comments
0

8 Embeds 994

http://tech.gmo-media.jp 972
http://cloud.feedly.com 6
http://www.newsblur.com 6
http://newsblur.com 4
http://www.hanrss.com 3
http://reader.aol.com 1
http://webcache.googleusercontent.com 1
http://news.google.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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