Ruby 为什么我的程序在提示用户之前接受用户输入?

Ruby 为什么我的程序在提示用户之前接受用户输入?,ruby,Ruby,我试图制作一个控制台程序,询问用户的姓名,并向他们致意。我用Notepad++编写代码,并在git bash控制台中运行它。我的代码是: puts "Hello, please type in your name: " name = gets.chomp puts "Hello #{name}, it is a pleasure to meet you!" 当它运行时,它等待用户输入,一旦输入,它将打印: Hello, please type in your name: Hello <n

我试图制作一个控制台程序,询问用户的姓名,并向他们致意。我用Notepad++编写代码,并在git bash控制台中运行它。我的代码是:

puts "Hello, please type in your name: "
name = gets.chomp
puts "Hello #{name}, it is a pleasure to meet you!"
当它运行时,它等待用户输入,一旦输入,它将打印:

Hello, please type in your name:
Hello <name_the_user_entered>, it is a pleasure to meet you!
您好,请输入您的姓名:
你好,很高兴认识你!

即使用户提示是代码中的第一个提示,它也会在打印任何测试之前接受用户输入。我遗漏了什么吗?

Ruby可能正在缓冲输出。要强制执行此操作,请使用
flush

$stdout.puts "Hello, please type in your name: "
$stdout.flush
name = gets.chomp
puts "Hello #{name}, it is a pleasure to meet you!"

但我认为在较新的Ruby版本中,这应该是不必要的。

欢迎使用!我无法重现你的问题。您是否正在使用ruby your_filename.rb运行?您好@ggorlen,谢谢您的关注。我正以这种方式将它输入控制台,是的。这成功了,谢谢@mb21。请注意,在stdout之前需要$才能正确编译。@moldymold ruby不是以任何方式编译的,不,它不需要stdout前面的
$
。请确保键入的是大写,ruby区分大小写。@AlekseiMatiushkin很抱歉,我是ruby新手,所以我没有意识到它没有编译。在我上次发表评论时,
STDOUT
STDOUT
,在这种情况下,它需要是
$STDOUT
。我感谢你花时间澄清!通常,使用
$stdout、$stdin、$stderr
而不是
stdout、stdin、stderr
是一种很好的做法。大写版本是常量,始终指向真实的流,用户或测试可能希望覆盖这些流,例如捕获和验证命令输出,这可以通过使用
$
版本来实现。