【问题标题】:Ruby script does not work with weird errors about highline libraryRuby 脚本不适用于关于 highline 库的奇怪错误
【发布时间】:2013-07-11 07:42:29
【问题描述】:

我有以下 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 say' /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 的输入时似乎失败了,但我无法理解错误,它们有什么关系?

谢谢

【问题讨论】:

    标签: ruby highline


    【解决方案1】:

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

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

    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 尝试在不应该的地方强制编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多