2012-05-09 42 views

Trả lời

35

gets sẽ sử dụng Kernel#gets, lần đầu tiên tìm cách đọc nội dung tệp được chuyển qua ARGV. Nếu không có tập tin trong ARGV, nó sẽ sử dụng đầu vào tiêu chuẩn để thay thế (lúc này nó cũng giống như STDIN.gets

Lưu ý:.. Như echristopherson chỉ ra, Kernel#gets sẽ thực sự rơi trở lại $stdin, không STDIN Tuy nhiên, trừ khi bạn gán $stdin đến một input stream khác nhau, nó sẽ giống hệt nhau để STDIN theo mặc định.

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

+0

Cảm ơn lời giải thích. Đã có một thời gian khó nhìn qua sự khác biệt đó trong các tài liệu. – stanigator

+0

Nó không rơi trở lại $ stdin, mà chỉ xảy ra thường là giống như STDIN? – echristopherson

+0

Cuộc gọi tốt, được cập nhật. –

19

gets.chomp() = đọc argv đầu tiên

STDIN.gets.chomp() = đọc đầu vào của người dùng

+0

Đây thực sự là câu trả lời đơn giản và tốt nhất. – James

3

vì nếu có thứ gì đó trong ARGV, phương thức mặc định sẽ tìm cách xử lý tệp đầu tiên dưới dạng tệp và đọc từ đó. Để đọc từ đầu vào của người dùng (ví dụ: stdin) trong tình huống như vậy, bạn phải sử dụng nó STDIN.gets một cách rõ ràng.

4

Nếu tập tin color.rb của bạn là

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} ?" 

và bạn chạy trong nhà ga

$ ruby color.rb blue yellow green 

nó sẽ ném ra một lỗi (không có lỗi tập tin như vậy)

nay thay thế 'được .chomp 'by' stdin.gets.chomp 'trên dòng bên dưới

least_fav_color = $stdin.gets.chomp 

và chạy trong thiết bị đầu cuối lệnh sau

$ ruby color.rb blue yellow green 

thì chương trình của bạn chạy !!

Về cơ bản khi bạn đã bắt đầu gọi ARGV từ khi khởi hành (như ARGV được thiết kế) get.chomp không thể thực hiện công việc của mình một cách chính xác nữa. Thời gian mang pháo binh lớn: $ stdin.gets.chomp

+0

Vành đai trắng Ruby ở đây hiện đang đục lỗ qua những bức tường đá granite của Ruby the Hard Way và chương này khiến tôi bối rối cho đến khi tôi tìm thấy lời giải thích của bạn. Cám ơn vì cái này! – user2136000

Các vấn đề liên quan