2009-06-10 17 views
4

私はこのコードをRubyライブラリで見ています。即ちselfによって参照されるオブジェクト - self.class.deleteはクラスメソッドを呼び出しますか?

私はself.class.deleteが現在のオブジェクトにdeleteと呼ばクラスのメソッドを呼び出すと仮定正しいアム。

def delete! 
    self.class.delete(self.key) 
end 

答えて

8

これは、クラスのメソッドdeleteをselfのクラスとして呼び出します。

class Example 
    def self.delete 
    puts "Class method. 'self' is a " + self.class.to_s 
    end 

    def delete! 
    puts "Instance method. 'self' is a " + self.class.to_s 
    self.class.delete 
    end 
end 

Example.new.delete! 

出力:

Instance method. 'self' is a Example 
Class method. 'self' is a Class
+0

のでself.class.deleteはExample.deleteと同じです。ありがとう。 – franz

1

ruby​​の 'class methods'が実際にクラスインスタンスメソッドであるという事実を無視して、正しいです。

0

はい、クラスメソッドです。現在のオブジェクトでそれを呼び出すかどうかは、用語をどのように使用しているかによって異なります。これは、引数self.keyを持つ現在のオブジェクトのクラスのメソッドdeleteを呼び出しています。

関連する問題