提问人:SwFly 提问时间:7/9/2023 最后编辑:SwFly 更新时间:7/10/2023 访问量:23
如何在 Pike 中实现按引用传递?
How can I achieve pass-by-reference in Pike?
问:
任何可以提供帮助并熟悉派克语的人。
我目前正在学习派克语言,我想实现一个空函数来计算给定数字“N”的阶乘。“阶乘”函数应接受两个参数:“N”参数表示计算限制,以及“RESPONSE”参数,用于存储要返回给调用程序的计算阶乘值。
我已经进行了广泛的搜索,但我找不到任何关于在 Pike 中通过引用传递参数的信息。这似乎是一个相当晦涩难懂的话题,或者可能没有被广泛讨论。我尝试过各种参数传递技术,例如使用 “*”、“&”、“ref”、“object”、“array[][”,但不幸的是,它们都没有奏效。我甚至尝试模拟 TCL 语言中使用的引用传递样式,但它也未能产生预期的结果。
如果有人对如何在 Pike 中实现引用传递行为有任何见解或建议,我将非常感谢您的帮助。
void factorial (int N, ref int FAT) {
for (int I = 1; I <= N; I++) {
FAT *= I;
}
}
答:
1赞
SwFly
7/9/2023
#1
Pike 没有按引用传递,但它确实具有某些引用类型,这些引用类型始终通过指针隐式处理。例如,如果某个方法采用数组参数,则它实际上具有指向与调用它的代码相同的数组的指针,并且如果它改变该共享数组的任何元素,则结果将对该调用代码可见。因此,您可以使用单元素数组作为事实上的指针,如下所示:
void fatorial(int N, array(int) FAT) {
FAT[0] = 1;
for (int I = 1; I <= N; I++) {
FAT[0] *= I;
}
}
int main() {
array(int) RESP = allocate(1);
RESP[0] = 1;
factorial(5, RESP);
write("Factorial = " + RESP[0] + "\n");
return 0;
}
评论