如果我在IRB中定义了一个Ruby方法,如何在不重新输入所有内容的情况下编辑该方法?

mar*_*ion 18 ruby irb

假设我正在运行IRB并将其输入控制台:

def full_name(first, last)
   puts "Your full name is: #{first, ' ', last}"
end
Run Code Online (Sandbox Code Playgroud)

比如,我想编辑它以包含参数middle,我将如何重新启动相同的方法并编辑参数列表并编辑puts语句而无需重新键入整个方法?

PS我知道这个例子很简单,我可以很容易地重新输入方法,但是我正在尝试更大的方法,为了简洁我使用这个简单的方法.

谢谢.

And*_*all 17

你不能.除了重新输入/重新输入,或者按下以获取之前的所有语句,但对于更长的方法,这可能会非常混乱.

为什么不在编辑器中键入代码,然后load 'mycode.rb'在IRb中呢?这基本上等同于复制和粘贴文本,并且load 'myfile.rb'像往常一样再次调用将覆盖现有的方法定义.

或者,更好的是,使用Pry而不是IRB,如下面的bannister建议的那样(我很久以前就完全用Pry替换了IRB).

  • @Andrew你可能会注意到,在IRB中这样做有点尴尬;)请注意我在Pry中如何做到这一点的答案,它自然支持这种事情:) (2认同)

hor*_*guy 13

您可以在Pry中轻松完成此操作(IRB的一个更强大的替代方法),只需使用edit-method命令在编辑器中重新打开该方法,如下所示:

[19] (pry) main: 0> def full_name(first, last)
[19] (pry) main: 0*   puts "Your full name is: #{first + '' + last}"  
[19] (pry) main: 0* end  
=> nil
[20] (pry) main: 0> edit full_name
Waiting for Emacs...
=> nil
[21] (pry) main: 0> show-method full_name

From: (pry) @ line 32:
Number of lines: 3
Owner: Object
Visibility: public

def full_name(first, middle, last)
  puts "Your full name is: #{first + middle + last}"
end
[22] (pry) main: 0> full_name "Stephen ", "william ", "Hawking"
Your full name is: Stephen william Hawking
=> nil
[23] (pry) main: 0> 
Run Code Online (Sandbox Code Playgroud)

编辑完成后,Pry会自动重新加载方法(也可以配置编辑器撬使用)


Nik*_* B. 6

我不认为你有很多选择.我通常做的是将我正在玩的代码放在一个文件中,并load '/path/to/file.rb'在我改变某些东西时用它来重新加载它.

您还可以尝试使用interactive_editorgem,它允许您在IRB会话中使用完整的文本编辑器进行文本编辑.