2009-06-08 10 views
26

モジュールまたはライブラリ内での "SELF"の使用に関する簡単な質問。基本的には、モジュールやライブラリに関係する「SELF」のスコープ/コンテキストは何ですか?また、モジュールやライブラリはどのように正しく使用されていますか?私が話していることの例については、 "restful_authentication"でインストールされた "AuthenticatedSystem"モジュールをチェックしてください。(Ruby、Rails)モジュールとライブラリのSELFのコンテキスト...?

注:私は、「自己」は他の言語では「これ」に相当し、モジュール/ライブラリのコンテキストでは「自己」には何もありませんが、 。それでは、クラスがないモジュールのようなものの内部の自己の文脈はどうですか?短い概要について

答えて

44

を追加します

あなたはインスタンスメソッドでselfを参照してください、それはのインスタンスを参照しますモジュールが含まれるクラス。

selfがインスタンスメソッドの外部にあると、そのモジュールを参照します。

module Foo 
    def a 
    puts "a: I am a #{self.class.name}" 
    end 

    def Foo.b 
    puts "b: I am a #{self.class.name}" 
    end 

    def self.c 
    puts "c: I am a #{self.class.name}" 
    end 
end 

class Bar 
    include Foo 

    def try_it 
    a 
    Foo.b # Bar.b undefined 
    Foo.C# Bar.c undefined 
    end 
end 

Bar.new.try_it 
#>> a: I am a Bar 
#>> b: I am a Module 
#>> c: I am a Module 
+1

正確に。 Rubyではすべてがオブジェクトです。自己が存在しない場所でコードを実行することはできません。 – Chuck

+0

わかりましたので、モジュール内でselfを呼び出すスコープ/目的は何ですか? –

+0

こんにちはすべて、 まだ明示的な答えを探しています。私はSELF *ができることを実現します。私が知る必要があるのはモジュールの機能のなかで何をするのでしょうか?私はいくつかのタイプの変数がグローバルに設定されていると推測しますが、これが当てはまるかどうかはわかりません。誰でも確認/啓蒙できますか? –

0

は... http://paulbarry.com/articles/2008/04/17/the-rules-of-ruby-self

自己は、クラスメソッド(またはC#/ Javaの人々のための静的メソッド)を追加するためにも使用されています。次のスニペットは、モジュールでは(静的)現在のクラスオブジェクトにdo_somethingと呼ばれる方法...

class MyClass 
    def self.do_something # class method 
     # something 
    end 
    def do_something_else # instance method 
    end 
end 
関連する問題