読者です 読者をやめる 読者になる 読者になる

俺です

クソザコなりにあがいてるRubyist

Rubyのオープンクラス

やっとタイトルらしいことを書くことにする。
まず、オープンクラスってなんぞや。

=>既存するクラスをいつでも再オープンし,
メソッド修正・追加など任意の変更を加えられる機能のこと。

なるほど。
とりあえず、簡単な例でも。

class Hoge
  def return_class_name
    'hoge'
  end
end
class Hoge 
  def return_class_name_double
    'hogehoge'
  end
end

object=Hoge.new
object.return_class_name  =>'hoge'
object.return_class_name_double =>'hogehoge'

この時、class Hogeの段階ではクラスは存在しない。
Rubyがこのクラス定義の内部に入った時にクラスを定義する。
そして、二回目のclass Hogeの段階では既にこのクラスは存在しているため、Rubyはこのクラスを定義せずに
クラスをオープンして新しいメソッドを追加する。
これがオープンクラスの動きらしい。
しかも既存のクラスを再オープンすることはStringやArrayといった標準メソッドでも適用されるらしい。

つまりあれだ、安易にクラスにコードを追加すると知らずに既存のメソッドを上書きする可能性があるということ。
(こういうコードをモンキーパッチと言うらしい)
恐ろしや。