ARGF в Ruby - це об’єкт, який дозволяє програмі читати введення з файлів, переданих як аргументи командного рядка, або зі стандартного введення (stdin), якщо аргументи відсутні. Це дозволяє програмі легко працювати з введенням незалежно від того, чи воно знаходиться в файлах або на вході з клавіатури.
Отже, ARGF
управляє потоками вводу з різних джерел. Він представляє собою поєднання об’єктів класу File
і об’єкта класу IO
(що включає стандартний ввід). Це робить його дуже зручним для зчитування великих обсягів даних, що розміщені в кількох файлах або отриманих через конвеєр.
Основні риси та функціональність класу ARGF
-
Потоковий ввід з файлів.
ARGF
дозволяє програмі читати введення з кількох файлів. Це може бути корисно, коли вам потрібно обробити дані з кількох файлів без необхідності відкривати їх окремо. -
Використання як Enumerable.
ARGF
є Enumerable, тому ви можете використовувати методи, такі якeach
,map
,select
, тощо, для обробки кожного рядка введення. -
Автоматичне визначення введення. Якщо аргументи командного рядка не вказані,
ARGF
автоматично використовує стандартний ввід (stdin). Це дозволяє програмам працювати як з введенням з файлів, так і з введенням з клавіатури. -
Зручний доступ до інформації про файли.
ARGF
має доступ до інформації про файли через спеціальні змінні, такі якARGF.filename
(поточний файл) таARGF.file.lineno
(номер поточного рядка у файлі).
Основні методи
-
ARGF.each {|line| ... }
: Цей метод дозволяє ітеруватися по кожному рядку вводу. Викликає блок для кожного рядка вводу, зчитуючи його по черзі з кожного файлу, який передається через аргументи командного рядка або стандартний ввід. -
ARGF.file
: Повертає поточний файл, з якого читається ввід. Це може бути корисно, якщо вам потрібно знати ім’я файлу, з якого вводиться певний рядок. -
ARGF.filename
: Повертає ім’я поточного файлу, з якого читається ввід. -
ARGF.close
: Закриває поточний файл.
Приклад використання ARGF
:
# Припустимо, ми маємо файли file1.txt та file2.txt
# file1.txt містить рядок "Hello"
# file2.txt містить рядок "World"
ARGF.each do |line|
puts line
end
# Виведе:
# Hello
# World
У цьому прикладі ARGF
автоматично зчитує рядки з обох файлів і виводить їх. Якщо б не було файлів, або якщо аргументи командного рядка не були передані, вводом для ARGF
б став стандартний ввід (stdin).