Witam, jestem początkującym w ruby i aktualnie przerabiam ( https://learnrubythehardway.org/book ).
Niech mi ktoś wyjaśni łopatologiczne jaka jest różnica między:
gets.chomp
a
$stdin.gets.chomp
a dokładnie nie rozumiem kiedy stosować ten początek $stdin? Nie wiem czy to jakiś rodzaj przestrzeni nazw czy jak?
Pozdrawiam
$stdin to zmienna globalna wskazująca na obiekt klasy IO związany ze standardowym wejściem. Ta klasa dostarcza m. in. wspomnianą przez Ciebie metodę gets. Jednak z uwagi na częstą potrzebę wczytywania z stdin została dodana globalna metoda gets (zdefiniowana w module Kernel), która domyślnie robi to samo co $stdin.gets. Dlaczego domyślnie? O tym jest napisane w dokuentacji:
Returns (and assigns to $_) the next line from the list of files in ARGV (or $*), or from standard input if no files are present on the command line.
Czyli jeśli program rubiego został wywołany “normalnie” to odczyt będzie ze standardowego wejścia. Jeśli program uruchiomio z parametrami będącymi nazwami plików (ruby program.rb file1 file2) to dane będą zwracane po kolei z tych plików. To pozwala pisać program w stylu unixowym, czyli domyślnie czytające ze standardowego wejścia, ale pozwalające także podać jako argumenty pliki (tak działa np. cat w linuksie).