函数

在circom中,函数定义了通用的抽象代码片段,可以执行一些计算以获得要返回的值或表达式。

#![allow(unused)]
fn main() {
function funid ( param1, ... , paramn ) {

 .....

 return x;
}
}

函数计算数值(或数组)值或表达式。函数可以是递归的。考虑circom 库中的下一个函数。

#![allow(unused)]
fn main() {
/*
    This function calculates the number of extra bits 
    in the output to do the full sum.
 */

function nbits(a) {
    var n = 1;
    var r = 0;
    while (n-1<a) {
        r++;
        n *= 2;
    }
    return r;
}
}

函数不能声明信号或生成约束(如果需要,请使用模板)。下面这个个函数会生成错误消息:“Template operator found”。

#![allow(unused)]
fn main() {
function nbits(a) {
    signal input in; //This is not allowed.
    var n = 1;
    var r = 0;
    while (n-1<a) {
        r++;
        n *= 2;
    }
    r === a; //This is also not allowed.
    return r;
}
}

通常,可以有许多返回语句,但是每个执行跟踪必须以返回语句结束(否则将产生编译错误)。return语句的执行将控制返回给函数的调用者。

#![allow(unused)]
fn main() {
function example(N){
     if(N >= 0){ return 1;}
//   else{ return 0;}
}
}

编译example函数会产生下一条错误消息:“In example there are paths without return”。