LoginSignup
3
3

More than 5 years have passed since last update.

self gem

Posted at

Ruby - Object#self があればちょっとうれしい - Qiita
の派生ネタ。
名前だけ関連していますが、内容は脱線していますw

self gem

というのがありますw

これは

class Object
  def self
    self
  end
end

では ありません w

紹介

簡単に言うと、インスタンス変数やプライベートメソッドへのアクセスを簡単に行うためのメソッドを作ってくれるメソッドです。インスタンス変数への代入メソッドも作ってくれます。

インストール

  • pry で使う場合
$ gem install pry-self

pry 実行時に自動的に self gem を require してくれます。

  • pry を使わない場合
$ gem install self

GitHub の例を実現する Class を書いてみました。

class Mouse
  class Head; end
  class Tail; end
  class Legs; end

  def initialize
    @head = Head.new
    @tail = Tail.new
    @legs = Legs.new
  end

  private
  def squeak!
    "Squeak!"
  end
end

この Mouse クラスのインスタンスメソッド mouseObject#self メソッドの働きを確認しましょう。 pry を使います。
pryls メソッドは、 -p オプションが(プライベートメソッドを含む)全てのメソッドを表示し、 -i オプションがインスタンス変数及びクラス変数を表示します。

[1] pry(main)> mouse = Mouse.new
#=> #<Mouse:0x007fe83e25d810 @head=#<Mouse::Head:0x007fe83e25d770>, @legs=#<Mouse::Legs:0x007fe83e25d680>, @tail=#<Mouse::Tail:0x007fe83e25d748>>
[2] pry(main)> ls -pi mouse
Mouse#methods: initialize  squeak!
instance variables: @head  @legs  @tail
  • Object#self のあとにインスタンス変数名のメソッドを呼ぶとインスタンス変数が返ります。
[3] pry(main)> mouse.self.head
#=> #<Mouse::Head:0x007fe83e25d770>
[4] pry(main)> mouse.head
NoMethodError: undefined method `head' for #<Mouse:0x007fe83e25d810>
  • Object#self のあとにはプライベートメソッドを呼べます。
[5] pry(main)> mouse.self.squeak!
#=> "Squeak!"
[6] pry(main)> mouse.squeak!
NoMethodError: private method `squeak!' called for #<Mouse:0x007fe83e25d810>
  • インスタンス変数への代入メソッドも作ってくれます。
[7] pry(main)> mouse.self.tail
#=> #<Mouse::Tail:0x007fe83e25d748>
[8] pry(main)> mouse.self.tail = "long tail"
#=> "long tail"
[9] pry(main)> mouse
#=> #<Mouse:0x007fe83e25d810 @head=#<Mouse::Head:0x007fe83e25d770>, @legs=#<Mouse::Legs:0x007fe83e25d680>, @tail="long tail">
[10] pry(main)> mouse.self.tail
#=> "long tail"

注意

この gem はテストだけに使いましょう。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3