*args 是什么意思?

Ahm*_*ker 5 ruby

是什么args意思,它之间有什么不同以及ARGV是否有区别?

 def puts_two(*args)
    arg1, arg2 = args
    puts "arg1: #{arg1}, arg2: #{arg2}"
    end
Run Code Online (Sandbox Code Playgroud)

rai*_*inz 6

在这种情况下,*args 和 ARGV 彼此无关。在你的例子中:

def puts_two(*args)
    arg1, arg2 = args
    puts "arg1: #{arg1}, arg2: #{arg2}"
end
Run Code Online (Sandbox Code Playgroud)

*args只是传递给方法puts_two的参数。* 是“splat”运算符,这意味着可以将任意数量的参数传递给该方法,并且它们将被“splatted”到数组中。所以如果你用以下方式调用它:

put_two('一', '二', '三')

args 将是一个类似于 ['one', 'two', ' Three'] 的数组。

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

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

arg1 => 'one'
arg2 => 'two'
Run Code Online (Sandbox Code Playgroud)

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


Aru*_*hit 3

*称为splat 运算符*args在这里*创建一个数组,其中包含发送到该方法的所有参数puts_two,并args作为局部变量保存对该数组的引用。以更清晰的方式 - splat 运算符用于处理具有可变参数列表的方法(即对参数进行数组)。

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

例如:

$ ruby argf.rb -v glark.txt
Run Code Online (Sandbox Code Playgroud)

argf.rb文件中,您将得到如下所示:

ARGF.argv   #=> ["-v", "glark.txt"]
Run Code Online (Sandbox Code Playgroud)