Chúng giống nhau hay có sự khác biệt tinh tế giữa hai lệnh?Sự khác biệt giữa get.chomp() so với STDIN.gets.chomp() là gì?
Trả lời
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
gets.chomp() = đọc argv đầu tiên
STDIN.gets.chomp() = đọc đầu vào của người dùng
Đây thực sự là câu trả lời đơn giản và tốt nhất. – James
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.
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
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
- 1. Sự khác biệt giữa html.AttributeEncode so với html.Encode là gì?
- 2. Sự khác biệt giữa tệp .so và .lo là gì?
- 3. EQU so với DC.B. Sự khác biệt là gì?
- 4. SET so với CHỌN - Sự khác biệt là gì?
- 5. SQL: Sự khác biệt giữa "GIỮA" so với "current_date - số"
- 6. Sự khác biệt giữa db_owner với db_datareader/db_datawriter là gì?
- 7. Sự khác biệt chính giữa C++ so với C++ .NET là gì?
- 8. Sự khác biệt giữa Điều khiển từ xa của Selenium so với WebDriver là gì?
- 9. Sự khác biệt lớn giữa IntelliJ + Ruby Plugin so với RubyMine là gì?
- 10. Sự khác biệt giữa "git reset" so với "git rebase" là gì?
- 11. Sự khác biệt giữa \ r và \ n là gì?
- 12. sự khác biệt giữa DoCmd.SetWarnings và CurrentDB.Execute là gì
- 13. Sự khác biệt giữa gói android.opengl và javax.microedition.khronos.opengles là gì?
- 14. Sự khác biệt giữa $ 1 so với% 1 in .htaccess
- 15. Flash.discard làm gì? Sự khác biệt giữa flash.clear() là gì?
- 16. Sự khác biệt giữa while (true) và loop là gì?
- 17. Sự khác biệt giữa biến động & extern là gì?
- 18. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 19. sự khác biệt giữa WAS và IIS là gì?
- 20. SBT - Sự khác biệt giữa tên và id là gì?
- 21. Sự khác biệt giữa Thông báo và pynotify là gì?
- 22. Sự khác biệt giữa Hashtable và Từ điển là gì?
- 23. Sự khác biệt giữa Request.ServerVariables ["REMOTE_ADDR"] và Request.UserHostAddress là gì?
- 24. Sự khác biệt giữa '&' và ',' trong Generics Java là gì?
- 25. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 26. sự khác biệt giữa lệnh linux và unix là gì?
- 27. Sự khác biệt giữa execl và execv là gì?
- 28. Sự khác biệt giữa nghỉ và thoát là gì?
- 29. Sự khác biệt giữa dispatch_get_global_queue và dispatch_queue_create là gì?
- 30. Unix: Sự khác biệt giữa nguồn và xuất là gì?
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
Nó không rơi trở lại $ stdin, mà chỉ xảy ra thường là giống như STDIN? – echristopherson
Cuộc gọi tốt, được cập nhật. –