[ruby] pobranie danych od użytkownika pomoc

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 :smiley:

$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).

Na zadanie domowe ;-):

1 Like

Przepraszam za offtopic ale należy Ci się dobre słowo @radarek. Zazdroszczę Juniorom, którzy są pod Twoją opieką.

1 Like