質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

662閲覧

pry内部でさらにpryできる理由

ironsand

総合スコア91

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/03/19 01:17

偶然気づいたんですがpryを既に起動してる状態で更に入れ子構造でpryを起動できるようです。

この機能が実際どういう時に役立つのか全くわからないのですが、何か便利な時があるのでしょうか?

思いつくのは変数などの環境の切り分けができる事ぐらいなのですが、それなら別で立ち上げたほうが使いやすい気がしますし、他にどんな理由がありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

入れ子構造でpryを起動するというよりも、見える範囲(スコープ)を切り替えると考えると良いのではないかと思います。ようするに利便性のためではないでしょうか。(そういう意味では、引数を指定せずに内部pryを起動する必要性については自分もわかりません)

なお標準添付のirbでも同じような仕組みがあります。

以下のように、pryの引数で与えたオブジェクトが新しいselfになります。

以下はスコープを切り替えたことにより、インスタンス変数に直接アクセスできるようになったという例です。

sh

1$ pry 2[1] pry(main)> self 3=> main 4[2] pry(main)> class Aaa; def initialize; @attr = '123'; end end 5=> :initialize 6[3] pry(main)> aaa = Aaa.new 7=> #<Aaa:0x86ab050 @attr="123"> 8[4] pry(main)> aaa.instance_variable_get :@attr 9=> "123" 10[5] pry(main)> pry aaa 11[1] pry(#<Aaa>)> self 12=> #<Aaa:0x86ab050 @attr="123"> 13[2] pry(#<Aaa>)> @attr 14=> "123" 15[3] pry(#<Aaa>)> exit 16=> nil 17[6] pry(main)> exit

以下はprivateなメソッドも呼び出せるようになったという例です。

sh

1$ pry 2[1] pry(main)> class Bbb; private def test; puts '123' end end 3=> Bbb 4[2] pry(main)> bbb = Bbb.new 5=> #<Bbb:0x86a464c> 6[3] pry(main)> bbb.test 7NoMethodError: private method `test' called for #<Bbb:0x86a464c> 8from (pry):3:in `__pry__' 9[4] pry(main)> pry bbb 10[1] pry(#<Bbb>)> test 11123 12=> nil 13[2] pry(#<Bbb>)> exit 14=> nil 15[5] pry(main)> exit

投稿2017/03/21 14:13

ksaga

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ironsand

2017/03/21 22:06

変数を引数にして呼び出せたんですね知りませんでした。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問