当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Readline.readline用法及代码示例


本文简要介绍ruby语言中 Readline.readline 的用法。

用法

readline(prompt = "", add_hist = false) → string or nil

显示prompt 并通过行编辑读取输入的行。如果add_hist 为真,则输入的行将添加到历史记录中。

当输入的行为空且用户输入 EOF(在 UNIX 上按 ^D)时返回 nil。

如果满足以下条件之一,则引发 IOError 异常。

  1. 标准输入已关闭。

  2. 标准输出已关闭。

此方法支持线程。等待输入行时切换线程上下文。

输入行时支持行编辑。提供 VI 和 Emacs 编辑模式。默认为 Emacs 编辑模式。

注意:在等待输入行时,用户按下“^C”后终止 ruby 解释器并且不返回终端状态。举3个例子来避免它。

  • 返回终端状态后按 ^C 捕获 Interrupt 异常:

    require "readline"
    
    stty_save = `stty -g`.chomp
    begin
      while buf = Readline.readline
          p buf
          end
        rescue Interrupt
          system("stty", stty_save)
          exit
        end
      end
    end
  • 返回终端状态后按 ^C 捕获 INT 信号:

    require "readline"
    
    stty_save = `stty -g`.chomp
    trap("INT") { system "stty", stty_save; exit }
    
    while buf = Readline.readline
      p buf
    end
  • 忽略按 ^C:

    require "readline"
    
    trap("INT", "SIG_IGN")
    
    while buf = Readline.readline
      p buf
    end

可以用 Readline::HISTORY 常数作如下。如果输入的行为空或与上一行相同,则不记录到历史记录中。

require "readline"

while buf = Readline.readline("> ", true)
  # p Readline::HISTORY.to_a
  Readline::HISTORY.pop if /^\s*$/ =~ buf

  begin
    if Readline::HISTORY[Readline::HISTORY.length-2] == buf
      Readline::HISTORY.pop
    end
  rescue IndexError
  end

  # p Readline::HISTORY.to_a
  print "-> ", buf, "\n"
end

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Readline.readline。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。