なんとなく日々徒然と

rubyのオープンクラス

rubyのオープンクラス

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Hoge
  def aaa
    p "aaa"
  end
end


hoge = Hoge.new

hoge.methods.grep(/aaa/) # => [:aaa]


class Hoge
  def bbb
    p "bbb"
  end
end

hoge.methods.grep(/aaa|bbb/) # => [:aaa, :bbb]

一度定義済みのクラスHogeに再度Hogeを定義している。
Hogeが定義されていると、二回目の呼び出しでは一回目の呼び出しのHogeが呼ばれ
そこにメソッドbbbが追加される。

当然String等の既存クラスにも対応。

1
2
3
4
5
6
7
8
9
class String
  def aaa
    p "aaa"
  end
end

str = "fuga"
str.methods.grep(/aaa/) # => [:aaa]
p str.aaa # => "aaa"

Tags:

構造体を使う 悲しいお話

comments powered by Disqus