让我们使用 ARGV
和 gets.chomp
一起来向使用者提一些特别的问题。下一节习题你将会学习到如何读写档案,这节习题是下节的基础。在这道习题里我们将用一个简单的 >
作为提示符号。这和一些游戏中的方法类似,例如 Zork 或者 Adventure 这两款游戏。
user = ARGV.first
prompt = '> '
puts "Hi #{user}, I'm the #{$0} script."
puts "I'd like to ask you a few questions."
puts "Do you like me #{user}?"
print prompt
likes = STDIN.gets.chomp()
puts "Where do you live #{user}?"
print prompt
lives = STDIN.gets.chomp()
puts "What kind of computer do you have?"
print prompt
computer = STDIN.gets.chomp()
puts <<MESSAGE
Alright, so you said #{likes} about liking me.
You live in #{lives}. Not sure where that is.
And you have a #{computer} computer. Nice.
MESSAGE
注意到我们将用户提示符号设置为 prompt
,这样我们就不用每次都要重打一遍了。如果你要将提示符号和修改成别的字串,你只要改一个地方就可以了。
非常顺手吧。
Important: 同时必须注意的是,我们也用了
STDIN.gets
取代了gets
。这是因为如果有东西在ARGV
里,标准的gets
会认为将第一个参数当成档案而尝试从里面读东西。在要从使用者的输入(如stdin
)读取资料的情况下我们必须明确地使用STDIN.gets
。
当你执行这个脚本时,记住你需要把你的名字传给这个脚本,让 ARGV
可以接收到。
$ ruby ex14.rb Zed
Hi Zed, I'm the ex14.rb script.
I'd like to ask you a few questions.
Do you like me Zed?
> yes
Where do you live Zed?
> America
What kind of computer do you have?
> Tandy
Alright, so you said 'yes' about liking me.
You live in 'America'. Not sure where that is.
And you have a 'Tandy' computer. Nice.
prompt
变量改为完全不同的内容再执行一遍。<<SOMETHING
形式的多行字串与 #{}
字串注入做的印出。