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