参数访问表达式
语法
| 形式 | 语法 |
|---|---|
| 1 | $[0-9]+ |
| 2 | $ ( 表达式 ) |
| 3 | $ < |
| 4 | $ ? |
描述
参数访问表达式用于访问当前函数调用的实参。通常用于获取被传递给变长形参的值。
void foo(int v, ...)
{
printlnf("%O %O %O %O", v, $1, $2, $3); // 访问实参
}
foo(10, 20, 30, 40); // 输出 "10 10 20 30"
获取指定位置的参数(形式1,形式2)
如形式1 所示,可以使用 $ 后跟一个数字来访问指定位置的实参,位置从 1 开始计数,$1 代表第一个
实参,$2 代表第二个实参,依此类推。
形式1 只支持字面量数字,如果需要使用其他表达式计算出的位置,可以使用如形式2 所示的语法,使用 $
后跟括号和一个表达式来访问指定位置的实参:
void foo(int v, ...)
{
int index = 2;
printlnf("%O", $(index)); // 访问第二个实参
}
foo(10, 20, 30, 40); // 输出 "20"
获取全部参数作为数组(形式3)
如形式3 所示,可以使用 $< 来获取所有实参作为一个 array:
void foo(int v, ...)
{
array args = $<;
printlnf("%O", args); // 访问所有实参
}
foo(10, 20, 30, 40); // 输出: [ /* sizeof() == 4 */
// 10,
// 20,
// 30,
// 40,
// ]
获取参数数量(形式4)
如形式4 所示,可以使用 $? 来获取实参的数量:
void foo(int v, ...)
{
int count = $?; // 获取实参数量
writeln(count);
}
foo(10, 20, 30, 40); // 输出 4