FAQ > 金融建模 > 建模问题 > 语法相关

Q:如何限制程序不允许改变参数的值    

  • A:
    默认的函数调用都是实参,也就是说函数内部可以修改入口参数,如下范例所示:

    Function Function304();
    Begin
      A:=10;
      B:=1;
      ab(A,B);
      return array(A,B); 
    //返回结果:A=11,B=11,由于调用子函数ab,导致A/B两个参数的值发生了改变
    end;

    function ab(v1,v2);
    begin
      v1++;
      v2+=10;
    end

    如果不想造成这种困扰,代码中采用{$VarByRef-}编译选项可以使得默认采用形参的模式。参考范例如下:

    Function Function304();
    Begin
      {$VarByRef-}
      A:=10;
      B:=1;
      ab(A,B);
      return array(A,B); //返回结果:A=10,B=1,保护了参数的值
    end;

    function ab(v1,v2);
    begin
      v1++;
      v2+=10;
    end

    如果确实希望个别的参数的值被改变,其他的参数保持原值不变,还可以用In out前缀指示送入的是形参还是实参,或者Var Const。参考范例如下:

    Function Function304();
    Begin
      A:=10;
      B:=1;
      ab(in A,out B);  //此处in可以换成const
      return array(A,B); //返回结果,A=10,B=11,A保留原值
    end;

    function ab(v1,v2);
    begin
      v1++;
      v2+=10;
    end