是什么args意思,它之间有什么不同以及ARGV是否有区别?
def puts_two(*args)
arg1, arg2 = args
puts "arg1: #{arg1}, arg2: #{arg2}"
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,*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 脚本的参数。
*称为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)
| 归档时间: |
|
| 查看次数: |
18139 次 |
| 最近记录: |