2012-01-17 7 views
37

これらのクラスの違いは何ですか?その目的の違いは何ですか?RubyのObjectとBasicObjectの違いは何ですか?

+1

ドキュメントは最初の部分に答えます。 BasicObjectは機能が少なく、Objectメソッドの束を削除してしまうとObjectの代わりに使うことができます。 –

答えて

55

BasicObjectはRuby 1.9に導入され、Objectの親です(したがって、BasicObjectはRubyのすべてのクラスの親クラスです)。

BasicObjectは、それ自体にはほとんどのメソッドを持っていない:

::new 
#! 
#!= 
#== 
#__id__ 
#__send__ 
#equal? 
#instance_eval 
#instance_exec 

BasicObjectは、委任のようなプロキシオブジェクトを Rubyのオブジェクト階層の独立したオブジェクト階層を作成するために使用することができますクラス、または Rubyのメソッドとクラス012からの名前空間汚染は避けなければなりません。

BasicObjectは、(プットのようなメソッドのための)カーネルと BasicObjectは、標準ライブラリの名前空間の外でそう 共通クラスは、完全なクラスパスを使用せずに見つけることはありませんが含まれていません。 機能がグローバルにアクセス可能な組み込みのカーネルを作るカーネルモジュールで


オブジェクトミックス、。オブジェクト のインスタンスメソッドは、カーネルモジュールで定義されているが...

あなたがObjectの方法を必要としない、あなたがそうでなければ、それらを未定義ならばあなたは場合に、オブジェクトの親としてBasicObject使用することができます。

# when you inherit Object 
class Tracer 
    instance_methods.each do |m| 
    next if [:__id__, :__send__].include? m 
    undef_method m 
    end 

    # some logic 
end 

# when you inherit BasicObject 
class Tracer < BasicObject 
    # some logic 
end 
関連する問題