使用方法之间的差异获取方法

时间:2014-09-21 17:20:48

标签: ruby input stdout stdin chomp

我看到了两种使用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删除换行符。

第二种形式幕后会发生什么?使用第二种形式有什么用或必要的情况?

3 个答案:

答案 0 :(得分:2)

“刷新”输出可确保在等待输入之前显示打印的消息;这可能只是某人不必要的确定,或者可能是某些操作系统上你需要它。或者,您可以STDOUT.sync = true使用force a flush after every output。 (您可能想知道,“为什么我不总是使用它?”嗯,如果您的代码输出了大量内容,反复刷新它可能会减慢它。)

chomp从输入的末尾删除换行符。如果你想要换行(用户输入姓名后按“Enter”键的结果),那就不要chomp了。

答案 1 :(得分:2)

看一些Github code我可以看到STDOUT.flush主要用于服务器端/多线程作业,而不是日常使用。

一般来说,当您想接受用户的输入时,您需要使用gets.chomp。请记住,无论用户输入什么内容,Ruby都会将其解释为字符串。

要将其转换为整数,您需要为浮点数调用to_ito_f。在这些情况下,您不需要chomp,因为to_ito_f会删除" \ n"自动。正如你所看到的那样,隐含着许多微妙的事情,而把它们搞清楚只是一个实践问题。

答案 2 :(得分:1)

我很少见到有人使用STDOUT.flush,但在多线程中除外。它也使事情变得混乱,打败了编写优雅代码的整个目的。