我有一个如下数组:
my @a = ('%d %d', 10, 20);
Run Code Online (Sandbox Code Playgroud)
我想使用此数组的元素作为函数的参数.
如果我只是尝试直接使用它,它会在标量上下文中解释:
say sprintf(@a); #=> 3
Run Code Online (Sandbox Code Playgroud)
我也尝试了这个,当然没有用:
@_ = @a; say sprintf; #=> Not enough arguments...
Run Code Online (Sandbox Code Playgroud)
某些语言的splat语法在这里也不起作用(我现在只是猜测):
say sprintf(*@a); #=> (error)
Run Code Online (Sandbox Code Playgroud)
其他内置函数也会出现同样的问题,例如join.
有没有办法采取任意数组(长度未知)和任意函数,并使用数组元素作为函数的参数调用函数?如果是这样,怎么样?
sprintf有原型$@,不是@,所以传递给它的第一个参数在标量上下文中进行评估.
在&忽略原型的情况下对子调用进行前缀,但必须使用内置函数的全名作为子调用:
say &CORE::sprintf(@a); # Perl 5.16+
Run Code Online (Sandbox Code Playgroud)
或明确传递第一个参数:
say sprintf($a[0], @a[1..$#a]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |