如何在Ruby中结合gets.chomp和ARGV?

时间:2016-11-13 21:14:01

标签: ruby

我是学习ruby的新手,目前仍坚持使用同一个脚本中的ARGV和gets.chomp。

我希望脚本首先解压缩3个参数然后我会问一个问题(gets.chomp),然后打印包含ARGV和gets.chomp变量之一的字符串。在终端中我将ARGV设置为一个二三(示例:ruby file1.rb一二三)。代码如下:

first, second, third = ARGV

puts "Your first variable is: #{first}"
puts "Your second variable is: #{second}"
puts "Your third variable is: #{third}"

这完全符合我的预期。在终端中,它给出了第一,第二和第三中的一,二和三变量。

我添加了一个put"你喜欢什么颜色"并按预期打印出来,但是当我为输入设置了gets.chomp时,我收到错误。

first, second, third = ARGV

puts "Your first variable is: #{first}"
puts "Your second variable is: #{second}"
puts "Your third variable is: #{third}"

puts "What is your favourite colour? "
colour = gets.chomp  #this is where the error occurs

puts "So your favourite number is #{first} and you like the colour #{colour}."    

^底线是我想要打印但我在gets.chomp

时收到错误

这是终端打印的内容:

$ ruby ex13.rb one two three
Your first variable is: one
Your second variable is: two
Your third variable is: three
What is your favourite colour? 
ex13.rb:8:in `gets': No such file or directory - one (Errno::ENOENT)
from ex13.rb:8:in `gets'
from ex13.rb:8:in `<main>'

我希望我已经很好地解释了上述情况,如果需要更多信息,请告诉我。

任何帮助将不胜感激!

谢谢,

1 个答案:

答案 0 :(得分:3)

昨天我回答了一个问题,您可以阅读here,但要具体说明您的具体情况:

first, second, third = ARGV之后,请致电ARGV.clear将其清空。

或者你可以first, second, third = 3.times.map { ARGV.shift }

原因是gets从ARGV读取其中是否有任何内容。在调用gets之前,您需要清空ARGV。