2011-10-03 8 views
6

これはどのように機能しますか?以下を実行すると、"hi from class"が2回印刷されます。このように動作させるために、ルビーの中で何が起こっているのですか?私は実際に私はあなたがそれを認識しているかどうかわかりませんが、あなたがclass Class ... endを行うとき、あなたは「、あなたをClassという名前の新しいクラスを作成していないクラスクラスクラス - インスタンスとクラスのメソッド

class Class 
    def foo 
    puts "hi from class" 
    end 
end 

Class.foo 
x = Class.new 
x.foo 

答えて

9

ためのインスタンスメソッドを作るわけではありません既存のクラスClassを再度開きます。

Classはすべてのクラスがそのインスタンスであるクラスであるため、Classはそれ自身のインスタンスです。そのため、Classの任意のインスタンスメソッドを直接他のクラスと同じ方法でClassに呼び出すことができます。

+0

だから( 'class Class'の本文で)私はdef self.foo; 「自己から**こんにちは」**; end; '...' Class.foo'というステートメントは 'hi from self'を出力しますか? – slindsey3000

+0

@ slindsey3000: 'Class'でインスタンスメソッドとクラスメソッドの両方を定義すると、' Class.foo'はクラスメソッドを呼び出し、 'AnyOtherClass.foo'はインスタンスメソッドを呼び出します。したがって、あなたの例では 'Class.foo'は' hi from ** self ** 'を出力します。 'String.foo'は' hi from class'を出力します。 – sepp2k

関連する問題