ruby under the hood
Post on 14-Feb-2017
312 Views
Preview:
TRANSCRIPT
名前: 日本語: グエン・ヴァン・ドゥック ベトナム語: Nguyễn Văn Đức
ニックネーム : レン年齢: 23際大学:ハノイ工科大学趣味:スポーツ、 PCゲーム
Ruby - under the hood
Problem
Ruby - under the hood
1.Method lookup - ancestor
2.How to change method lookup path
3.Summary
Method lookup
Rubyはメソッドを実行するとき、クラス自身、親クラス、親の親クラス、 ...という順番でメソッドを探しに行きますよね?何となくイメージはできるけど、実際にその動作をどうやって確認しますか?それに、親や子供などの関係がなく、 includeなどを使う場合に、メソッドを実行する順番はどのようになるでしょうか?
Ancestors
Rubyには、 ancestorsというメソッドがあります。このメソッドは、関連する全てのクラスを配列にして返します。ancestorsで得られたクラスの配列の中にメソッドが存在するか、順番に探して、見つけたらそのメソッドを実行します。
Ancestor
この順番によると、最初は Basicクラスでメソッドを探す次は Blunch,JFC、。。
Ancestors
デフォルトだと ancestorsで得られる配列の中で、一番最初に見つけたクラスのメソッドが実行されます。でも、他のモジュールのメソッドを実行したい場合、どうすれば良いのでしょうか? (ancestorsチェーンの順番を変えたい )
クラスで他のモジュールを includeしたり、 prependしたり、他のクラスをextendしたりすると、 ancestorsチェーンが変更されます。
Include
クラスで他のモジュールを Includeすると、セルフクラスの次に入ります
Prepend
クラスで他のモジュールを prependすると、逆に ,セルフクラスの前に入ります
Another
1.super
ancestorsチェーンの中で次に見つかった同じメソッド名を実行します。
Another
2. alias
Summary
これは、マジックでは、ありません。
ご清聴ありがとうございます。
top related