「gets」はユーザー入力を待ちません

概要

Ruby プラットフォームを使用して repl.it でプログラムを開発しようとしています。私が持っているものは次のとおりです。

puts "Copy the entire request page and paste it into this console, then 
hit ENTER."
request_info = gets("Edit Confirmation").chomp.gsub!(/\s+/m, ' 
').strip.split(" ")

puts "What is your name?"
your_name = gets.chomp
puts "Thanks, #{your_name}!"

私が理解した方法では、ユーザーは「編集確認」で終わる複数行のリクエストを貼り付け、その後、リクエストを単語ごとに独自の配列に分割し、私が解析して関連する配列を取得します。データ。

しかし、最初に複数行の入力をユーザーに問い合わせた後、gets コマンドを再度使用することはできないようです。それ以降に使用しようとする他の get コマンドはスキップされ、プログラムが終了します。

解決策

あなたのコードは非常に珍しいことをしています。gets メソッドに文字列を渡すことによって、実際には入力区切り文字を変更しています。

gets(sep, limit [, getline_args]) → string or nil

コードが期待どおりに動作しない理由は、末尾に「」があるためです。 ” 文字が入力バッファに残っているため、2 回目の呼び出しでは即座にこの文字列が返されます。

おそらくこれを解決する最も簡単な方法は、最初の gets 呼び出しでこの文字を吸収することです。

request_info = gets("Edit Confirmation\n").chomp.gsub!(/\s+/m, ' ').strip.split(" ")

このような「複雑な」複数行入力の場合、ファイル名パラメータを Ruby スクリプトに渡し、このファイルを端末に貼り付けるよりも読み取る方が一般的です。

または、gets(nil) を使用して EOF 文字まで読み取り、CTRL+D を押して複数行入力の終了を示すようにユーザーに要求することもできます。