2

self私はそのキーワードについて完全に迷子になりました。モジュール、クラス、メソッド、ブロック、またはその他すべてに入ると、どのように変化しますか?誰か私に要約を教えてもらえますか?

ここで私は、自己が何を意味するのかではなく、実行に伴って自己がどのように変化するのかを尋ねています。

4

2 に答える 2

3

self常に現在のオブジェクトを参照します。

class A
  p self # => A

  def foo
    p self # => instance of A
  end
end

module M
  p self # => M
end

A.new.foo
于 2013-03-25T21:18:08.620 に答える
3

いくつものものを参照するJavaScriptとは異なりthis、Rubyではself常に現在のメソッドの実行コンテキストを参照します。

classメソッド内でself、クラス自体を参照します。

class FooClass
  def self.bar
    self # => FooClass
  end
end

classインスタンスメソッド内で、インスタンスselfを参照します。

class FooClass
  def bar
    self # => This instance (FooClass#nnnn)
  end
end

moduleメソッド内でself、モジュールを参照する場合があります。

module FooModule
  def self.bar
    self # => FooModule
  end
end

モジュールメソッドが経由で混合されるincludeと、インスタンスを参照します。

module FooModule
  def bar
    self # => (Depends on included context)
  end
end

class BarClass
  include FooModule

  def foo
    bar # => This instance (BarClass#nnnn)
  end
end

唯一のトリッキーな部分はモジュールであり、他のものがそれらを含むことができるので、それらはトリッキーなだけです。それを最もよく覚える方法は、一般的にドットの左側selfにあるものを指します。つまり、そのメソッドの直接のコンテキストにあるということです。my_object.fooselfmy_object

と型操作、または固有クラスを操作するための宣言をself使用して、ブロックのコンテキスト内で再定義する方法があります。instance_evalclass_evalclass << self

于 2013-03-25T22:47:14.070 に答える