2012-05-09 129 views

回答

35

gets將使用Kernel#gets,它首先嚐試讀取通過ARGV傳入的文件的內容。如果在ARGV沒有文件,它將使用標準輸入,而不是(此時它一樣STDIN.gets

注意:由於echristopherson指出,Kernel#gets實際上將回落到$stdin,不STDIN但是,除非你分配$stdin到不同的輸入流,這將是相同STDIN默認。

http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-gets

+0

感謝您的解釋。很難查看文檔中的差異。 – stanigator

+0

它不會回退到$標準輸入,它恰好經常與標準輸入相同? – echristopherson

+0

良好的通話,更新。 –

19

gets.chomp()=讀ARGV第一

STDIN.gets.chomp()=讀取用戶的輸入

+0

這實際上是最簡單和最好的答案。 – James

3

因爲 如果有東西在ARGV,默認獲得方法試圖把第一個爲文件和讀取從 。要在這種情況下從用戶的輸入(即stdin)中讀取,你必須明確地使用STDIN.gets的 。

4

如果您color.rb文件

first, second, third = ARGV 

puts "Your first fav color is: #{first}" 
puts "Your second fav color is: #{second}" 
puts "Your third fav color is: #{third}" 

puts "what is your least fav color?" 
least_fav_color = gets.chomp 

puts "ok, i get it, you don't like #{least_fav_color} ?" 

,你在終端

$ ruby color.rb blue yellow green 

它會拋出一個錯誤(沒有這樣的文件錯誤)

現在替換「得到運行.chomp'通過'stdin.gets.chomp'在下面的線上

least_fav_color = $stdin.gets.chomp 

,並在終端中運行命令

$ ruby color.rb blue yellow green 

那麼你的程序運行以下!

基本上,一旦你開始從動態調用ARGV(如ARGV的設計),gets.chomp就無法正常工作了。時間帶來大炮:$ stdin.gets.chomp

+0

紅寶石白色腰帶目前在這裏鑿過紅寶石堅硬路的花崗岩牆壁,這一章讓我難住,直到我找到你的解釋。感謝你! – user2136000

相關問題