新手问题 如何让 gets 可以记忆以前输入的信息

ssqq · 2015年08月20日 · 最后由 douxiance 回复于 2015年08月20日 · 2092 次阅读

Ruby 的 IRB 可以用上箭头键显示已经输入过的东西,我设计了一个 getc 的循环,不知道该怎么能拥有命令记忆的功能呢?

$ repl
This is REPL for Spp language, type 'exit' to exit
Spp >> 'hello'
["Str","hello"]
Spp >>

找一下 readline 文档

#1 楼 @nouse 文档里有,但

$ irb
irb(main):001:0> require "readline"
=> false

irb(main):003:0> exit

Administrator@OH6XSDN588EC0DF C:\rakudo\share\perl6\lib\Use
$ gem install readline
ERROR:  Could not find a valid gem 'readline' (>= 0) in any repository
ERROR:  Possible alternatives: deadline, redline, rediline, redlink, redvine

我昨天明明为了安装 Rails 把 gem 切换到 ruby.taobao.com 上了

我解决了。

gem install rb-readline

然后测试了这个代码,发现可以运行:

require 'readline'

loop do
  line = Readline::readline('> ')
  break if line.nil? || line == 'quit'
  Readline::HISTORY.push(line)
  puts "You typed: #{line}"
end

原来系统自带了 readline 模块,但为什么在 IRB 中 require 'readline' 返回 false 呢?

#3 楼 @ssqq require 返回 false 的意思是自己被 require 一次了

长见识了!

原来 readline 模块被 irb 自己加载了,然后就返回 false 了,不存在的模块调用会报错。

这个解释应该是合理的,是否可以从 irb 的实现中得到印证呢。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号