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

ssqq · August 20, 2015 · Last by douxiance replied at August 20, 2015 · 2137 hits

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 的实现中得到印证呢。

You need to Sign in before reply, if you don't have an account, please Sign up first.