Ruby 2.7 REPL 中的历史记录支持

History support in Ruby 2.7 REPL

如果您输入以下内容,我会在 IRB 中注意到:

Readline::HISTORY << 'something = ->() { 5 }'

然后当您按键盘上的向上箭头键时,您将看到您的代码 something = ->() { 5 }。然后按回车键执行代码...

老红宝石也是如此。但是对于 Ruby 2.7,它不起作用。 它不会引发任何类型的错误,当您按向上箭头键时,历史记录根本不起作用!

事实上,我已经对 REPL 进行了修补以满足我自己的需要。它将历史记录写入文件,然后在加载 irb shell 时加载它们(就像 MRuby 的 REPL "mirb")。 Here's the patched irb.

有什么方法可以让 Ruby 2.7 的补丁 irb 工作?

Is there a way I to get the patched-irb work with Ruby 2.7?

让打过补丁的软件版本与新版本一起工作总是很棘手,尤其是当您对内部功能如何工作做出假设时。

当你的补丁版本与原始版本没有任何关系时,这会更难。您创建了自己的 irb 存储库,它与原始 irb 没有任何关系,因此无法使用版本控制来保持最新。

相反,创建原始存储库的分支并在分支中创建补丁。然后通过从原始上游存储库中拉取,您可以更好地了解最新变化,确保一切仍然有效,并准确找出您的补丁失败的上游版本。

幸运的是irb was recently spun off into its own gem。分叉那个 gem,在那个分叉中制作你的补丁,并通过定期从上游 gem.

拉取更改来保持最新

然后将您的补丁作为拉取请求提交到上游。如果它们被合并,它们将作为更大项目的一部分继续工作。单独维护它们不再是你的工作。