28

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

注: 「自己」は他の言語では「これ」と同等であり、クラス/オブジェクトで「自己」がどのように機能するかは認識していますが、モジュール/ライブラリのコンテキストでは「自己」には何もありません。では、クラスのないモジュールのようなものの中の自己のコンテキストは何ですか?

4

2 に答える 2

50

モジュール内:

インスタンスメソッドで見る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
于 2009-06-08T23:16:19.427 に答える
0

簡単な要約については... http://paulbarry.com/articles/2008/04/17/the-rules-of-ruby-self

self は、クラス メソッド (または C#/Java の場合は静的メソッド) を追加するためにも使用されます。次のスニペットは、do_something というメソッドを現在のクラス オブジェクト (静的) に追加しています...

class MyClass
    def self.do_something   # class method
       # something
    end
    def do_something_else   # instance method
    end
end
于 2009-06-08T04:25:19.617 に答える