Как я могу добиться передачи по ссылке в Pike?
любой, кто может помочь и знаком с языком щуки.
В настоящее время я изучаю язык Пайка и хотел бы реализовать функцию void, которая вычисляет факториал заданного числа «N». Функция «факториал» должна принимать два параметра: параметр «N», который представляет предел расчета, и параметр «ОТВЕТ», который будет хранить вычисленное значение факториала, которое будет возвращено вызывающей программе.
Я много искал, но не смог найти никакой информации о передаче параметров по ссылке в Pike. Кажется, это довольно неясная тема или, возможно, не широко обсуждаемая. Я пробовал различные методы передачи параметров, такие как использование «*», «&», «ref», «object», «array[][», но, к сожалению, ни один из них не сработал. Я даже пытался смоделировать стиль передачи по ссылке, используемый в языке TCL, но это также не дало желаемого результата.
Если у кого-нибудь есть какие-либо идеи или предложения о том, как добиться поведения передачи по ссылке в Pike, я был бы очень признателен за вашу помощь.
void factorial (int N, ref int FAT) {
for (int I = 1; I <= N; I++) {
FAT *= I;
}
}
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;
}