- 更新日: 2014年10月13日
- Ruby
特定のオブジェクトのコンテキストでirb/pryをネストして実行
スポンサーリンク
ここのところ「メタプログラミングRuby」を読んでいるのですが、p186 に書いてあったirbセッションのネストが眼から鱗でしたので紹介。というかこれ何で今まで知らなかったんだろう、自分大丈夫かと不安になりましたです(苦笑。
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
スポンサーリンク
irbセッションのネストirb は特定のオブジェクトのコンテキストで、ネストした irb セッションを新しく開き、そこでコードを実行できる。これは instance_eval() とよく似ている…
メタプログラミングRuby(p186)
特定のオブジェクトのコンテキストで irb 実行
特定のオブジェクトのコンテキストに移動するには、irb に入った後にさらに、”irb some_object” と入力するだけです。以下 irb の実行例に # でコメントを追加しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# irb に入る $ irb irb(main):001:0> s = "hello irb" => "hello irb" # s オブジェクトのコンテキストに移動 irb(main):002:0> irb s irb#1(hello irb):001:0> reverse => "bri olleh" # s はこのコンテキストには存在しないので NameError irb#1(hello irb):002:0> s NameError: undefined local variable or method `s' for "hello irb":String from (irb#1):2 # self は s irb#1(hello irb):003:0> self => "hello irb" # self(s)のクラスは String irb#1(hello irb):004:0> self.class => String # String#upcase irb#1(hello irb):005:0> upcase => "HELLO IRB" # 現在のコンテキストを抜ける irb#1(hello irb):006:0> exit => #<IRB::Irb: @context=#<IRB::Context:0x007f9b81896178>, @signal_status=:IN_EVAL, @scanner=#<RubyLex:0x007f9b8188e4c8>> # irb 終了 irb(main):003:0> exit |
この機能は、特定のオブジェクトの挙動確認の際などにすごく便利ですね!
pry でも同様に特定のオブジェクトのコンテキストに入れる
私は、Rails 開発で pry-rails(https://github.com/rweng/pry-rails)で pry を実行することが多いです。なので、pry でも同様にできるか確認してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ bundle exec rails c Loading development environment (Rails 4.1.1) [1] pry(main)> s = "hello pry" => "hello pry" [2] pry(main)> pry s [1] pry("hello pry")> reverse => "yrp olleh" [2] pry("hello pry")> s NameError: undefined local variable or method `s' for "hello pry":String from (pry):3:in `__pry__' [3] pry("hello pry")> self => "hello pry" [4] pry("hello pry")> self.class => String [5] pry("hello pry")> upcase => "HELLO PRY" [6] pry("hello pry")> exit => nil [3] pry(main)> exit |
irb の例と同じ操作をしてみましたところ、同様にオブジェクトのコンテキストを移動して操作できました。Ruby や Rails まだまだ知らないことも多いです、驚き最小の原則とは言えど新しい便利な発見があるのは楽しいですね。
スポンサーリンク
私は以下の本で Ruby を覚えました。メタプログラミングRubyは入門を超える内容で難しめです。
<< 前の記事 : 類似文字列検索ライブラリSimStringをRubyから使う
- Ruby の関連記事
- Gemの作り方(Ruby Gem)
- ローカル開発中のgemをGemfileに書いてインストール
- 熊本地震の余震が夜に多いのは本当か?Rubyプログラムで検証してみた
- El Capitanでgemのnative extensionビルド失敗に対応
- Rubyで親クラスから子クラスの定数を参照
- MacabをRubyで使う
- rbenv/ruby-buildでRuby最新バージョンをインストール
- Rubyでクラスインスタンス変数にインスタンスメソッドからアクセス
- 距離1kmあたりの緯度・経度の度数を計算(日本・北緯35度)
- Google Maps Geocoding APIで住所から緯度・経度を取得するRubyコード
Leave Your Message!