假设我正在运行IRB并将其输入控制台:
def full_name(first, last)
puts "Your full name is: #{first, ' ', last}"
end
说,我想编辑它以包含参数middle
,我将如何重新启动相同的方法并编辑参数列表并编辑puts
语句而无需重新键入整个方法?
P.S。我知道这个例子很简单,我可以很容易地重新输入方法,但是我正在尝试使用更大的方法,为了简洁我使用这个简单的方法。
感谢。
答案 0 :(得分:16)
你做不到。除了重新输入/重新输入,或者按↑来获取之前的所有语句,但对于更长的方法,这可能会非常混乱。
为什么不在编辑器中键入代码,然后在IRb中执行load 'mycode.rb'
?这基本上等同于复制并粘贴文本,并且像往常一样再次调用load 'myfile.rb'
将覆盖现有的方法定义。
或者更好的是,使用Pry而不是IRB作为suggested by bannister below(我很久以前就完全用Pry替换了IRB)。
答案 1 :(得分: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>
Pry在编辑完成后自动重新加载方法(编辑器撬使用的也可以是configured)
答案 2 :(得分:6)
我认为你没有很多选择。我通常做的是将我正在播放的代码放在一个文件中,并在我改变某些内容时使用load '/path/to/file.rb'
重新加载它。
您还可以尝试interactive_editor
gem,它允许您在IRB会话中使用完整的文本编辑器进行文本编辑。
答案 3 :(得分:3)
答案 4 :(得分:1)
你可以通过irb或pry编辑这个(我强烈推荐) - 但是你需要重新输入整个内容。如果你考虑它,一个方法并不难以输入:P但是,如果你在一个类中包含多个方法,重新键入整个类和相应的方法可能会非常繁琐。在这种情况下你可以做的是使用class_evals。
Class Name
def full_name(first, last)
puts "Your full name is: #{first + ' ' + last}"
end
end
# NEW Edited Code
Name.class_eval do
def full_name(first, middle, last)
puts "Your full name is: #{first + ' ' + middle + ' ' + last}"
end
end
Here's a good resource to read about re-opening classes/monkeypatching和here's another that warns about the bad effects of monkeypatching
答案 5 :(得分:0)
从Ruby 2.7.0-preview1版本开始,如果按下↑按钮,则可以在IRB会话中进行编辑:
来源:https://www.ruby-lang.org/en/news/2019/05/30/ruby-2-7-0-preview1-released/