Ruby

Search for '{{search_term}}'

ARGV - аргументы командной строки в Ruby

CMOS is the Code-Maven Open Source podcast that also includes video interviews. Subscribe to this feed RSS feed with your Podcast listener app or via iTunes iTunes.

Когда вы запускаете скрипт на Ruby, то можете указать любые значения в командной строке после имени скрипта:

Например:

ruby code.rb abc.txt def.txt qqrq.txt

или вот так:

ruby code.rb Hello --machine big -d -tl

Вопрос в том, как программа на Ruby понимает, что передано в командной строке.

Ruby предоставляет массив ARGV со значениями из командной строки. Мы можем получить доступ к элементам этого массива так же, как и в случае любого другого массива:

ARGV[0] это первое значение после имени скрипта.

Мы можем обойти все элементы либо с помощью цикла for:

examples/ruby/command_line_argv.rb

for arg in ARGV
   puts arg
end

либо с помощью диапазона индексов, получая элементы по индексу.

examples/ruby/command_line_argv_with_index.rb

for i in 0 ... ARGV.length
   puts "#{i} #{ARGV[i]}"
end

$ ruby command_line_argv_with_index.rb foo bar --machine big
0 foo
1 bar
2 --machine
3 big

Проверка количества аргументов

Для простой валидации переданных значений мы можем проверить длину массива ARGV. И если мы получили недостаточно аргументов, то сообщить об этом и преждевременно завершить работу программы.

examples/ruby/command_line_argv_check_length.rb

if ARGV.length < 2
  puts "Too few arguments"
  exit
end

puts "Working on #{ARGV}";

Запустив скрипт, мы получим:

$ ruby command_line_argv_check_length.rb one
Too few arguments

$ ruby command_line_argv_check_length.rb one two
Working on ["one", "two"]

Значения из командной строки имеют тип строка

Во фрагменте кода мы сначала проверяем, получили ли мы точно 2 параметра, и если да, то суммируем их:

examples/ruby/command_line_argv_add.rb

if ARGV.length != 2
  puts "We need exactly two arguments"
  exit
end

puts ARGV[0] + ARGV[1]

ruby command_line_argv_add.rb 23 19
2319

Результат вас не удивит, если вы знаете, что переданные в командную строку значения, приходят в программу как строки. Даже если это на самом деле числа. Если мы хотим использовать их как числа, то нужно их сконвертировать с помощью to_i:

$ ruby command_line_argv_add_numbers.rb 23 19
42

Savenkova Natalya
Переводчик
Savenkova Natalya
Gabor Szabo
Автор
Gabor Szabo

Comments