2009-05-15 8 views

答えて

-2

ObjectはRubyの予約語なので、クラス名として使用しないでください。

+2

ObjectはRubyの予約語ではありません。String、Hashなどと同様に、特定のクラスを参照するグローバルに定義された定数です。Rubyの予約語は 'if'、' return'などです。 –

10

実際には、このコードはモジュール内にあり名前空間になっているので問題なく動作するはずです。簡単なテストのために:あなたは、オブジェクトの一部を指しますその内側に他のクラスやモジュール、中にいくつか::オブジェクトが含まれている場合

module Some 
    class Object 
    def foo 
     "bar" 
    end 
    end 
end 

Some::Object.new.foo # "bar" 
Some::Object.new.class # "Some::Object" 

# And it doesn't pollute the global namespaced Object class: 
Object.new.respond_to?(:foo) # false 

それは潜在的に、しかし、混乱や曖昧である可能性があります。しかし、そのクラスやモジュールの外には何の影響も与えません。

+0

これは正しい答えです:唯一の本当の欠点は混乱していることです。 – Chuck

3

落とし穴がいくつかありますが、機能します。これを行うと、既にRubyにあるObjectクラスが展開されます。

class Object 
    def hello 
    end 
end 

名前空間にすると、その名前空間に新しいクラスが作成されます。

module Foo 
    class Object 
    # ... 
    end 
end 

技術的に言えば、これは問題ではありません。

組み込みのObjectクラスを参照する場合は、::Objectを使用する必要があります。あなたはそれほど頻繁にはしませんが、大きな問題ではありません。

他の問題は、他の開発者にとって非常に混乱する可能性があることです。これは考慮する必要があります。あなたのスニペットからこのSome::Objectクラスが何をするのかは分かりませんが、おそらくSome::RecordSome::Entityが理にかなっています。

関連する問題