0

gets簡単な形式のを使用する 2 つの方法を見ました。

print 'Insert your name: '
name = gets()
puts "Your name is #{name}"

そして私の注意を引いたフォーム:

print 'Insert your name: '
STDOUT.flush
name = gets.chomp
puts "Your name is #{name}"

flush2 番目のサンプルは、デフォルトの出力ストリームのメソッドを使用する点で perl のように見えます。Perl は明示的なデフォルトの出力ストリーム操作を行います。その方法flushは私には謎です。私が推測しているものとは異なる動作をする可能性があり、chomp改行文字を削除するために使用します。

第二形態の舞台裏は?2 番目の形式を使用するのに役立つ、または必要な状況は何ですか?

4

3 に答える 3

2

出力を「フラッシュ」すると、入力を待つ前に出力されたメッセージが表示されます。これは誰かが不必要に特定しているだけかもしれませんし、特定のオペレーティング システムでそれが必要な場合もあります。STDOUT.sync = trueまたは、すべての出力後にフラッシュを強制するために使用できます。(「どうしていつもこれを使わないの?」と思うかもしれません。コードが大量のコンテンツを出力している場合、繰り返しフラッシュすると速度が低下する可能性があります。)

chomp入力の末尾から改行を削除します。改行(ユーザーが名前を入力した後に「Enter」を押した結果)が必要な場合は、そうしないchompでください。

于 2014-09-21T18:22:33.970 に答える
1

マルチスレッド以外で誰かが STDOUT.flush を使用しているのを見たことがありません。また、それは物事を混乱させ、エレガントなコードを書くという目的全体を台無しにします。

于 2014-09-22T01:33:14.100 に答える