阅读一些看起来像这样的代码:
/*
* C program to find all permutations of letters of a string
*/
#include <stdio.h>
#include <string.h>
/* Function to swap values at two pointers */
void swap (char *x, char *y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
/* End of swap() */
/* Function to print permutations of string */
void permute(char *a, int i, int n)
{
int j;
if (i == n)
printf("%s\n", a);
else {
for (j = i; j <= n; j++)
{
swap((a + i), (a + j));
permute(a, i + 1, n);
swap((a + i), (a + j)); //backtrack
}
}
}
/* The main() begins */
int main()
{
char a[20];
int n;
printf("Enter a string: ");
scanf("%s", a);
n = strlen(a);
printf("Permutaions:\n");
permute(a, 0, n - 1);
getchar();
return 0;
}
export function printAdd(...numbers: number[]) {
alert(`Adding the numbers: ${numbers.join(', ')}`);
}
中的...
是否必要。 IIUC意味着数字是一个数组,但我们也用...numbers
声明,所以看起来我们是双重浸入?
答案 0 :(得分:1)
......数字是否必要?
不,但这个问题的答案完全取决于您对参数的预期用途。
在您引用的示例中,@Value("Hello there!")
表示rest parameter。使用它将在指定类型的数组中调用函数时指定所有参数(在本例中类型为...
)。请考虑以下示例函数和调用:
number
不使用rest参数指示编译器该函数期望接收类型为export function printAdd(...numbers: number[]) {
alert(`Adding the numbers: ${numbers.join(', ')}`);
}
printAdd(1, 2, 3); // Valid because there are 0 or more arguments of type number
printAdd([1, 2, 3]); // Not valid because there is a single argument and it is of type number[]
的单个参数。
number[]
通过分析Typescript编译器的输出,这一点变得更加明显。编译时,第一个例子变为:
export function printAdd(numbers: number[]) {
alert(`Adding the numbers: ${numbers.join(', ')}`);
}
printAdd(1, 2, 3); // Not valid because there are 3 arguments of type number
printAdd([1, 2, 3]); // Valid because there is a single argument of type number[]
请注意arguments
对象的使用。这是一个类似数组的对象,但它不是一个数组。这意味着您无法使用任何// COMPILER OUTPUT
function printAdd() {
var numbers = [];
for (var _i = 0; _i < arguments.length; _i++) {
numbers[_i] = arguments[_i];
}
alert("Adding the numbers: " + numbers.join(', '));
}
方法。
第二个例子变为
Array.prototype
未使用// COMPILER OUTPUT
function printAdd(numbers) {
alert("Adding the numbers: " + numbers.join(', '));
}
对象且arguments
为numbers
,因此Array
方法可立即供使用。