我看到了两种使用gets
的方法,一种简单的形式:
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}"
第二个示例在使用默认输出流的flush
方法时看起来像perl。 Perl显式默认输出流操作;方法flush
对我来说是一个谜。它的行为可能与我推断的不同,它使用chomp
删除换行符。
第二种形式幕后会发生什么?使用第二种形式有什么用或必要的情况?
答案 0 :(得分:2)
“刷新”输出可确保在等待输入之前显示打印的消息;这可能只是某人不必要的确定,或者可能是某些操作系统上你需要它。或者,您可以STDOUT.sync = true
使用force a flush after every output。 (您可能想知道,“为什么我不总是使用它?”嗯,如果您的代码输出了大量内容,反复刷新它可能会减慢它。)
chomp
从输入的末尾删除换行符。如果你想要换行(用户输入姓名后按“Enter”键的结果),那就不要chomp
了。
答案 1 :(得分:2)
看一些Github code我可以看到STDOUT.flush
主要用于服务器端/多线程作业,而不是日常使用。
一般来说,当您想接受用户的输入时,您需要使用gets.chomp
。请记住,无论用户输入什么内容,Ruby都会将其解释为字符串。
要将其转换为整数,您需要为浮点数调用to_i
或to_f
。在这些情况下,您不需要chomp
,因为to_i
或to_f
会删除" \ n"自动。正如你所看到的那样,隐含着许多微妙的事情,而把它们搞清楚只是一个实践问题。
答案 2 :(得分:1)
我很少见到有人使用STDOUT.flush,但在多线程中除外。它也使事情变得混乱,打败了编写优雅代码的整个目的。