我有以下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:inget_response' /Library/Ruby/Gems/1.8/gems/highline-1.6.19/lib/highline.rb:259:in
问'
在验证the_pass
的输入时看起来失败了,但我无法理解错误,它们有什么关系?
由于
答案 0 :(得分:0)
这是Ruby的HighLine
gem中的错误处理< 1.9。
违规行(由您的错误消息标识)是:
statement.force_encoding(Encoding.default_external) if defined?(Encoding) && Encoding.default_external
您可以通过以下方式处理:
删除脚本中的所有include REXML
命令。这会使REXML::Encoding
与Encoding
保持联系。
在脚本的早期某处添加以下行:
REXML::Encoding.instance_eval { def default_external; false; end }
这一行可以防止丢失方法错误,并阻止HighLine
尝试强制进行编码。