Help us understand the problem. What is going on with this article?

おもしろメタプログラミング/2章

More than 1 year has passed since last update.

二章 月曜日オブジェクトモデル

目次

  • 2.1 オープンクラス => ハンズオン モンキーパッチ
  • 2.2 オブジェクトモデルの中身
    • 2.2.1 オブジェクトの中身
    • 2.2.2 クラスの真相 => クイズ クラス
    • 2.2.3 定数
    • 2.2.4 オブジェクトとクラスのまとめ
    • 2.2.5 ネームスペースを使う
  • 2.3 クイズ: 引かれてない線
  • 2.4 メソッドを呼び出すときに何がおこなわれているの?
    • 2.4.1 メソッド探索 => 説明 ハンズオン メソッド探索
    • 2.4.2 メソッド実行
    • 2.4.3 Refinements
  • 2.5 クイズ:絡み合ったモジュール
  • 2.6 まとめ

ハンズオン モンキーパッチ

1, String classに新しいメソッドを追加しよう
2, String classの既存のメソッドを上書きしよう

ex)

$ vim monkey_patch.rb

monkey_patch.rb
class String
  def monkey_patch_method
    p 'I am monkey patch'
  end

  def to_i
    p 'to_i is overridden'
  end
end

'a string'.monkey_patch_method
'1'.to_i

$ ruby monkey_patch.rb

クイズ クラス

1, 'mystring'.class #=> ?

2, String.class #=> ?

3, Class.class #=> ?

class MyClass < String
end

4, MyClass.superclass #=>?

5, String.superclass #=> ?

6, Object.superclass #=> ?

7, BasicObject.superclass #=> ?

8, Class.superclass #=> ?

クイズ self

class SomeClass
  self
  def initialize
  end

  def self.class_method
    p self
  end

  def some_method
    p self
  end
end

説明 メソッド探索

my_object = MyClass.new
my_bject.my_method

メソッド探索のルールは
「Classに入って(右へ一歩)、SuperClassを登る(それから上へ)」

※ClassにModuleがインクルードされてたら、Classの上に入れる

ハンズオン メソッド探索

module M1
end

module M2
  include ::M1
end

module M3
  prepend ::M1
  include ::M2
end


p M3.ancestors

1, M3.ancestors #=>?

module PrependedModule
  def some_method
    p 'prepended module'
  end
end

module SomeModule
  prepend PrependedModule
  def some_method
    p 'some module'
  end
end

class SuperClass
  def some_method
    p 'super class'
  end
end

class SubClass < SuperClass
  include SomeModule
end

SubClass.new.some_method

2, SubClass.new.some_method #=> ?

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away