2016-11-13 43 views
2

我是學習ruby的新手,目前堅持在同一個腳本中使用ARGV和gets.chomp。如何在Ruby中結合gets.chomp和ARGV?

我希望腳本先解壓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}" 

這種方式完全如我所料。在終端中,它給了我1,2和3個變量,分別是第一,第二和第三。

我在puts中添加了「你最喜歡的顏色是什麼」,並按預期打印出來,但是當我爲輸入設置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>' 

我希望我已經解釋上面已經足夠了,讓我知道是否需要更多信息。

任何幫助將不勝感激!

感謝,

+0

你會得到什麼錯誤? – spickermann

+0

@spickermann 你最喜歡什麼顏色? ex13.rb:8:'得到 ':沒有這樣的文件或目錄 - 一個(錯誤:: ENOENT)從ex13.rb \t:8:'得到' 從ex13.rb \t:8:'

' 我現在會用終端錯誤更新我的問題。 – Philpot

回答

2

我回答這個昨天,你可以閱讀here,而是專門針對您的情況的問題:

first, second, third = ARGV

後,調用ARGV.clear空出來。

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

的原因是,從gets ARGV讀取,如果有一個在任何事情。在致電gets之前,您需要清空ARGV。

+0

'STDIN.gets.chomp'也有效,但我無法解釋爲什麼? –

+0

請參閱[紅寶石之間的差異stdin-gets-and-gets-chomp](http://stackoverflow.com/questions/12041492/ruby-whats-the-difference-between-stdin-gets-和獲得-格格) –