1

我有以下 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 ask'

验证输入时似乎失败了the_pass,但我无法理解错误,它们有什么关系?

谢谢

4

1 回答 1

0

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

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

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

您可以通过以下任一方式处理此问题:

  1. 删除include REXML脚本中的任何命令。这将REXML::Encoding不再与Encoding.

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

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

    此行将防止缺少方法错误,并将防止HighLine尝试在不应该的地方强制编码。

于 2013-07-11T21:21:32.040 回答