2016-01-17 3 views
1

Я использую терминал и назначение нескольких переменных на рубин файл hello_world.rb следующим образом:Рубин назначить более одного аргумент из терминала

$ ruby hello_world.rb arg1 arg2 arg3 arg4 

Если я ставлю

$ ruby hello_world.rb hello world mars jupiter 

Мне нужно, чтобы отобразить

hello world 
hello mars 
hello jupiter 

И если я поставлю

$ ruby hello_World.rb whaddup boy girl 

он должен отображать

whaddup boy 
whaddup girl 

1-й аргумент будет первой строкой, а остальные аргументы каждому из них будет указан в качестве 2-й строки.

Я был в состоянии создать код:

def hello_world(first, *second) 
    second.each do |arg| 
     puts "#{first} #{arg}" 
    end 
end 

Но когда я бегу $ ruby hello_world.rb hello world mars от терминала, он ничего не будет выведено. Думаю, мне нужно использовать ARGV. Я знаю, как это сделать только с одним аргументом,

def hello_world 
    ARGV.each do |arg| 
     puts "Hello #{arg}" 
    end 
end 

hello_world 

Terminal:

$ ruby hello_world.rb world mars jupiter 
#=> Hello world 
#=> Hello mars 
#=> Hello jupiter 

Я понятия не имею, как это сделать в случае двух аргументов или более. Любая помощь будет высоко ценится. Спасибо!

ответ

3

ARGV константа просто массив, так что вы можете сделать, например, следующее:

def hello_world 
    first = ARGV.shift 
    puts ARGV.map { |arg| "#{first} #{arg}" } 
end 

hello_world 

Метод Array#shift удалит и возвращает первый элемент массива. В этом случае первый аргумент передается из командной строки.

Выход:

$ ruby hello_world.rb hello world mars 
#=> hello world 
#=> hello mars 
+0

Большое вам спасибо, это работает! – Iggy

0

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

def hello_world(first, *second) 
    second.each do |arg| 
     puts "#{first} #{arg}" 
    end 
end 

hello_world *ARGV 
# ..........^ 

документированного на http://ruby-doc.org/core-2.2.3/doc/syntax/calling_methods_rdoc.html#label-Array+to+Arguments+Conversion