2013-07-11 2 views
1

Je le script Ruby suivant:de script Ruby ne fonctionne pas avec des erreurs étranges sur la bibliothèque Highline

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

Et il échoue quand j'appuyez sur Entrée:

méthode non définie default_external' for REXML::Encoding:Module /Library/Ruby/Gems/1.8/gems/highline-1.6.19/lib/highline.rb:621:in dire » /Bibliothèque /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 demander »

On dirait qu'il échoue lors de la validation de l'entrée pour the_pass, mais je ne peux pas comprendre l'erreur, comment sont-ils liés?

Merci

Répondre

0

Ce qui est mauvais dans la gestion des erreurs de la gemme HighLine pour Ruby < 1.9.

La ligne incriminée (identifiée par votre message d'erreur) est:

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

Vous pouvez gérer cela soit:

  1. Suppression des include REXML commandes dans votre script. Cela empêchera REXML::Encoding d'être associé à Encoding.

  2. ajoutant la ligne suivante, quelque part au début de votre script:

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

    Cette ligne empêche l'erreur de méthode manquante et empêchera HighLine d'essayer de forcer l'encodage où il ne devrait pas.

Questions connexes