Ruby脚本不适用于有关高线库的奇怪错误

时间:2013-07-11 07:42:29

标签: ruby highline

我有以下Ruby脚本:

begin 
      puts "What is the password? "
      the_pass = ask("") { |q| q.echo = "*" }
end while the_pass == nil || the_pass == "\n" || the_pass == ""

当我按Enter键时失败:

  

未定义的方法default_external' for REXML::Encoding:Module /Library/Ruby/Gems/1.8/gems/highline-1.6.19/lib/highline.rb:621:in 说'   /Library/Ruby/Gems/1.8/gems/highline-1.6.19/lib/highline.rb:914:in   get_response' /Library/Ruby/Gems/1.8/gems/highline-1.6.19/lib/highline.rb:259:in 问'

在验证the_pass的输入时看起来失败了,但我无法理解错误,它们有什么关系?

由于

1 个答案:

答案 0 :(得分:0)

这是Ruby的HighLine gem中的错误处理< 1.9。

违规行(由您的错误消息标识)是:

statement.force_encoding(Encoding.default_external) if defined?(Encoding) && Encoding.default_external

您可以通过以下方式处理:

  1. 删除脚本中的所有include REXML命令。这会使REXML::EncodingEncoding保持联系。

  2. 在脚本的早期某处添加以下行:

    REXML::Encoding.instance_eval { def default_external; false; end }

    这一行可以防止丢失方法错误,并阻止HighLine尝试强制进行编码。