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 キーを押すと失敗します。

undefined method 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、エラーを理解できません。それらはどのように関連していますか?

ありがとう

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 に答える