Как я могу добиться передачи по ссылке в 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;
}
Другие вопросы по тегам