Ruby args是什么意思?

Ruby args是什么意思?,ruby,Ruby,args是什么意思?如果有差异,它与ARGV之间有什么不同 def puts_two(*args) arg1, arg2 = args puts "arg1: #{arg1}, arg2: #{arg2}" end *称为splat运算符。在*args中,此处*创建一个数组,其中包含发送到方法的所有参数puts\u two,并且args作为局部变量保存对数组的引用。更清楚地说,splat运算符用于处理具有可变参数列表(即排列参数)的方法 包含传递给脚本的参数,每个元素

args
是什么意思?如果有差异,它与
ARGV
之间有什么不同

 def puts_two(*args)
    arg1, arg2 = args
    puts "arg1: #{arg1}, arg2: #{arg2}"
    end
*
称为splat运算符。在
*args
中,此处
*
创建一个数组,其中包含发送到方法
的所有参数puts\u two
,并且
args
作为局部变量保存对数组的引用。更清楚地说,splat运算符用于处理具有可变参数列表(即排列参数)的方法

包含传递给脚本的参数,每个元素一个

例如:

$ ruby argf.rb -v glark.txt
argf.rb
文件中,您将获得以下信息:

ARGF.argv   #=> ["-v", "glark.txt"]

在本例中,*args和ARGV彼此无关。在您的示例中:

def puts_two(*args)
    arg1, arg2 = args
    puts "arg1: #{arg1}, arg2: #{arg2}"
end
*args只是传递给方法puts_two的参数。*是“splat”运算符,这意味着可以将任意数量的参数传递给该方法,并将它们“splatted”到数组中。因此,如果你用以下方式来称呼它:

放两个(‘一’、‘二’、‘三’)

args将是一个看起来像['1','2','3']的数组

请注意,在变量arg1和arg2的赋值中,仅使用数组的前2个元素,因此使用上面的示例

arg1, arg2 = ['one', 'two', 'three']

arg1 => 'one'
arg2 => 'two'

ARGV只是从命令行传递给ruby脚本的参数。

ARGV是ruby中的一个特殊变量。它包含在命令行上传递给脚本的参数。例如,如果在名为test.rb的文件中编写以下代码:

ARGV.each do |a|
    puts a
end
这样称呼它

c:\> ruby test.rb one two
将显示

one
two
在您发布的代码中,
*args
只是指示该方法在名为
args
的数组中接受数量可变的参数。它可以被任意调用(当然,遵循Ruby命名规则)


因此在这种情况下,
args
ARGV
完全无关,这在Ruby中被称为“splat操作符”。有关不同的用途,请参见以下文章:

在方法定义中,它基本上只是将所有剩余的参数收集到一个数组中(注意,自从Ruby 2.0以来,还可以使用类似于
**kwargs
的东西来收集关键字args)