Guest User

Untitled

a guest
Mar 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. # 1 モジュールの特徴
  2. * モジュールは単体ではインスタンス化できない
  3. * モジュールは継承できない
  4. * モジュールはクラスや他のモジュールに取り込むことができる
  5.  
  6. # 2 モジュールのメソッド探索経路
  7. ## 2.1 無名クラス
  8. ***
  9. `include`が実行されると、インタプリタは指定されたモジュールに対応する無名クラスを作成して、スーパークラスとの間にそれを組み込む。
  10.  
  11. ## 2.2 メソッドの優先度
  12. ***
  13. ### 2.2.1 includeの場合
  14. モジュールとそれをMix-inしたクラスのどちらにも同名のメソッドが存在するとき、2.1節で示したように、`include`したクラスの継承チェーンは、モジュールに対応した無名クラスがスーパークラスとの間に挿入されるので、モジュールのメソッドが優先されると判断しそうだが、実際は継承チェーンに挿入されるだけで、実行順序は変わらない。
  15.  
  16. ```ruby
  17. module M1
  18. def method1
  19. puts "module"
  20. end
  21. end
  22.  
  23. class C1
  24. def method1
  25. puts "class"
  26. end
  27. end
  28.  
  29. p C1.new.method1 #=> "class"
  30. ```
  31.  
  32. ### 2.2.2 prependの場合
  33. `prepend`も`include`同様にモジュールをクラスに取り込むためのメソッドであるが、`prepend`を呼び出したクラスよりも先にモジュールに対してメソッド検索を行う。したがって同名のメソッドが存在する場合、振る舞いが`include`とは異なる。
  34.  
  35. # 3 特異クラス
  36. ## 3.1 特異クラスの定義
  37. ***
  38. ```ruby
  39. def <オブジェクト名>.<新たに定義するメソッド名>
  40. ...
  41. end
  42. ```
  43.  
  44. ## 3.2 特異クラスの参照と再オープン
  45. ***
  46. 特異クラスを再オープンするには以下の公文を使用する。
  47.  
  48. ```ruby
  49. class << 対象のオブジェクト
  50. ```
  51.  
  52. ```ruby
  53. foo = Foo.new(1)
  54. singleton_class = class << foo
  55. self
  56. end
  57.  
  58. p singleton_class #=> <Class:#0xnnnnnnn>
  59. ```
Add Comment
Please, Sign In to add comment