More Related Content Similar to メタプログラミングRubyはこの付録が美味しい Similar to メタプログラミングRubyはこの付録が美味しい (20) More from Shigeru UCHIYAMA More from Shigeru UCHIYAMA (6) メタプログラミングRubyはこの付録が美味しい1. メタプログラミングRubyは
この付録が美味しい
(読書会落ち穂拾い)
@suchi
hamamatsu.rb#16 LT
2012/06/13
2. 湖池屋の
ジャガッツは
このギザギザが
おいしい
http://www.youtube.com/watch?v=r1Pr8x-0ZNU
4. A.4 自己yield
例: tap 電源タップと同じ。電源の取り出し。メソッドチェーン
の途中で取り出す。
class Object
def tap
yield self
self
end
end
%w(a b c).push('d').shift.upcase.next
%w(a b c).push('d').tap{|x|puts x}.shift.upcase.next
8. 涙目で読む
1. Symbolのto_procはProcを返す(1.9ではデフォルト)
2. そのProcは1つめの引数をレシーバとして、シンボル名のメソッ
ドに残りの引数を渡して呼び出す
3. シンボルに&をつけると、Procとして扱われる(内部でto_proc
が呼び出してくれる)
4. InjectはそのProcに一つ前の返値と新しい要素の二つを渡す。
5. Injectの最初の引数(0)は最初の要素の第一引数にが使われる
6. たとえば最初は :+.to_proc.call(0, 1) が呼ばれるので0.+(1)が
呼ばれる。以下ループ
7. つまり[1,2,3].inject(0,&:+)は、
・:+.to_proc.call(:+.to_proc.call(:+.to_proc.call(0,1), 2), 3)
同じことになる
#=>8
9. 付録B ドメイン特化言語
• DSL: ドメイン特化言語
– (Domain Specific Language)
• GPL: 汎用言語
– (General Purpose Language)
• 内部DSL:
– GPL内に存在するDSL
• 外部DSL:
– 独自のパーザ。書かれた言語と無関係
• →Rubyはメタプログラミングが得意なので内
部DSLも得意ですよ
14. 湖池屋の
ジャガッツは
このギザギザが
おいしい
http://www.youtube.com/watch?v=r1Pr8x-0ZNU