如何在Pry中添加/修改/删除方法?

时间:2013-10-10 04:30:17

标签: ruby read-eval-print-loop pry

我正在尝试使用主代码REPL编辑器。

我发现这与我想要的非常接近,但我不知道如何使用它。我想知道如何在类中添加/修改/删除每个方法(或任何其他成员)。

当我尝试这个时,

➜  ~  pry
[1] pry(main)> class AAA
[1] pry(main)*   def bbb
[1] pry(main)*     "ccc"
[1] pry(main)*   end  
[1] pry(main)* end  
=> nil
[2] pry(main)> cd AAA
[3] pry(AAA):1> ls
AAA#methods: bbb
locals: _  __  _dir_  _ex_  _file_  _in_  _out_  _pry_
[4] pry(AAA):1> def xxx
[4] pry(AAA):1*   "yyy"
[4] pry(AAA):1* end  
=> nil
[5] pry(AAA):1> def xxx
[5] pry(AAA):1*   "zzz"
[5] pry(AAA):1* end  
=> nil
[6] pry(AAA):1> cd ..
[7] pry(main)> Pry.WrappedModule(AAA).source
=> "class AAA\n  def bbb\n    \"ccc\"\n  end\nend\ndef xxx\n  \"yyy\"\nend\ndef xxx\n  \"zzz\"\nend\n"
[8] pry(main)> AAA.new.xxx
=> "zzz"
[9] pry(main)> 

它按照我的预期运作良好。但源代码包含xxx方法的重复定义。如果我想删除较旧的(或两者),我该怎么做?另外,如果我想删除现有方法(或任何其他成员)而不交换新方法,我该怎么做?

P.S。我这样做主要是为了在内存和磁盘之间编辑,存储和恢复类源代码。 (一种基于图像的持久性)

1 个答案:

答案 0 :(得分:0)

我找到了答案。使用undef命令。

[11] pry(main)> cd AAA
[13] pry(AAA):1> ls
AAA#methods: bbb  xxx
locals: _  __  _dir_  _ex_  _file_  _in_  _out_  _pry_
[14] pry(AAA):1> undef xxx
=> nil
[15] pry(AAA):1> ls
AAA#methods: bbb
locals: _  __  _dir_  _ex_  _file_  _in_  _out_  _pry_
[16] pry(AAA):1> cd ..
[17] pry(main)> Pry.WrappedModule(AAA).source
=> "class AAA\n  def bbb\n    \"ccc\"\n  end\nend\n"
[18] pry(main)>