2

IRB(実はWirble)で練習しています。IRB 内のハッキングをファイルにダンプして、後で差分、編集、および再利用できるかどうか疑問に思っていました。

外出先でクラス、メソッド、データを作成し、コードを進化させるにつれて、インタラクティブなセッションには時々貴重なマイルストーンが含まれます。したがって、これをソース形式で再利用することは価値があります。

編集:元の質問をさらに明確にするために:IRBでこれを行いたい:

class A; def m1; end; end
class A; def m2; end; end

そして最後にクラスAを次のようにダンプします

class A

  def m1
  end

  def m2
  end

end

(必ずしもコードをきれいに印刷する必要はありません:-))

編集: Re: @DGM/pry: "pry" はクールなようですが、イントロスペクションは多少バグがあるようで、期待どおりの動作をしません。上記のことを行いましたが、使用した場合、 m1 メソッドはリストされていませんshow-method A:

[1] pry(main)> class A; def m1; end; end     
=> nil

[2] pry(main)> class A; def m2; end; end
=> nil

[3] pry(main)> show-method A#m1
[...]
class A; def m1; end; end

[4] pry(main)> show-method A#m2
[...]
class A; def m2; end; end

[5] pry(main)> show-method A
[...]
class A; def m2; end; end

編集: 私はバグ レポートを提出しました。@banister はこじ開けの問題に非常に役立ちました。チケットを参照してください。そこには非常に貴重なデータがあります。

編集: @banister の使用が提案されてeditおり、そのワークフローに従うことは理にかなっています。

4

4 に答える 4

2

irbについてはよくわかりませんが、irbのより強力な代替品として設計されたより強力なpryを使用する場合は、次のことができます。

1] pry(メイン)> クラス Foo
[1] pry(メイン)* デフバー
[1] てこ(メイン)* 1
[1]こじる(メイン)※終了
[1]こじる(メイン)※終了
=>なし
[2] pry(メイン)> show-method Foo#bar

From: (pry) @ 2 行目:
回線数: 3
オーナー:フー
可視性: 公開

デフバー
  1
終わり
[3] pry(メイン)> show-method Foo

From: (pry) @ 1 行目:
回線数: 5

クラスフー
  デフバー
    1
  終わり
終わり
于 2013-06-04T12:48:10.520 に答える
1

Pry では、REPL 内ではなくを使用してクラスを作成すると、edit正常に動作するはずです。次の showterm を参照してください。

http://showterm.io/434d8965312292c8830c9#fast

于 2013-06-05T02:12:48.290 に答える
0

このようなファイルがあります。~/.irb-history をチェックしてください:

$ irb
1.9.3p429 :001 > 2+2
 => 4
1.9.3p429 :002 > 3+3
 => 6
1.9.3p429 :003 > exit
$ tail -n 3 ~/.irb-history
2+2
3+3
exit
于 2013-06-04T11:48:37.007 に答える
0

残念ながら、Ruby では動的に作成されたクラスのソースをダンプする方法はありません。例えば:

>> class Test
>>   value = rand
>>   define_method(:f) do 
?>     value
>>   end
>> end
=> #<Proc:0x007fed0b19b2c0@(irb):3 (lambda)>
>> Test.new.f
=> 0.7602337424749085
>> Test.new.f
=> 0.7602337424749085

Testクラスのソースを回復する方法はありません。メソッドのソースを取得できるさまざまな gem がありますが、それらはソースが表示されるファイルからソースを読み取ることによって機能し、動的に生成されたメソッドでは機能しません。

これを達成できる唯一の実際の方法は、IRB 履歴を使用して、そこから必要なものを抽出することです。このファイルは にあります~/.irb-history。これを自動化することは可能かもしれませんが (例えば、現在の IRB セッションからそのファイルから定義を抽出するなど)、まだ誰もそれを行っていないと思います。

于 2013-06-04T11:53:19.067 に答える