目指そうかなRubyist RSSフィード

 | 

2011-06-11

[meta] self  [meta] self - 目指そうかなRubyist を含むブックマーク はてなブックマーク -  [meta] self - 目指そうかなRubyist  [meta] self - 目指そうかなRubyist のブックマークコメント

testing_selfを呼び出すとobjがselfになる。@varはobjのインスタンス変数になる。

class MyClass
  def testing_self
    @var = 10
    my_method()
    self
  end

  def my_method
    @var = @var + 1
  end
end

obj = MyClass.new
p obj.testing_self # => #<MyClass:0x0000010092e180 @var=11>

常にselfのオブジェクトが何かを意識すること。

トップレベルのself

methodを呼び出さないとき、selfはどうなっているのか。

ruby-head :011 > self
 => main
ruby-head :012 > self.class
 => Object

class定義とself

ruby-head :013 > class X; self; end
 => X 

モジュールやクラスの定義のなかでは、selfはモジュールやクラスになる。

privateの本当の意味

class C
  def public_method
    self.private_method
  end

  private
  def private_method; end
end

C.new.public_method

これはもちろん実行できない。privateキーワードは明示的なレシーバーをつけてプライベートメソッドを呼び出すことはできない。暗黙的なレシーバーselfに対するものでなければならない。よって、上記のコードはselfを削除すれば動く

 |