Ruby从终端分配多个参数

时间:2016-01-17 04:50:22

标签: ruby command-line terminal arguments argv

我正在使用终端并以如下方式在ruby文件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

第一个参数将是第一个字符串,其余参数将分别列为第二个字符串。

我能够创建代码:

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

终端:

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

我不知道在两个或更多参数的情况下如何做到这一点。任何帮助都感激不尽。谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您需要做的就是使用您的第一个hello_world方法,但是使用ARGV的元素调用它,而不是ARGV本身,使用splat:

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