superclass=
type=class
library=_builtin
extended=
included=

特殊な用途のために意図的にほとんど何も定義されていないクラスです。
[[c:Object]]クラスの親にあたります。Ruby 1.9 以降で導入されました。

==== 性質
BasicObject クラスは Object クラスからほとんどのメソッドを取り除いたクラスです。

Object クラスは様々な便利なメソッドや [[c:Kernel]] から受け継いだ関数的メソッド
を多数有しています。
これに対して、 BasicObject クラスはオブジェクトの同一性を識別したりメソッドを呼んだりする
最低限の機能の他は一切の機能を持っていません。

==== 用途
基本的にはほぼすべてのクラスの親は [[c:Object]] と考えて差し支えありません。
しかし、ある種のクラスを定義する際には Object クラスは持っているメソッドが多すぎる
場合があります。

例えば、 [[m:Object#method_missing]]を利用して Proxy パターンを実装する場合には
Object クラスに定義済みのメソッドはプロクシできないという問題が発生します。
このような場合に Object ではなく BasicObject から派生して問題を解決できます。

==== 注意
通常のクラスは Object またはその他の適切なクラスから派生すべきです。
真に必要な場合にだけ BasicObject から派生してください。

==== 例
例
 class Proxy < BasicObject
   def initialize(target)
     @target = target
   end
 
   def method_missing(message, *args)
     @target.__send__(message, *args)
   end
 end
 
 proxy = Proxy.new("1")
 proxy.to_i #=> 1
