在TSL语言中,与绝大多数语言不同的是,对形参与实参的支持是通过调用者而不是函数申明来实现的。
例如:
RealA:=100;
RealB:=200;
Writeln(Abcd(In RealA,Out RealB));
Writeln("RealA=",RealA,"RealB=",RealB);
Function abcd(a,b);
Begin
A:=a*2;
B:=b*3;
Abcd:=A+B;
End;
这样运行的结果:
800
RealA=100RealB=600
TSL用in或者const表示送入的为值(形参),而用out或者var表示送入的为引用(实参)。
既然上边说到了TSL语言默认都是实参,为什么还多此一举加入了out,var前缀呢?
在TSL语言中支持通过{$VarByRef-}关闭允许参数值修改的编译选项,同时也可通过IN、OUT指示来修改默认的参数方式。
如:
{$VarByRef-} //取消允许参数修改的设定
A1:=0;b1:=0;c1:=0;
Abcd(a1,b1,c1);//此处a1,b1,c1都仍旧为0,因为送入形参
Abcd(in a1,out b1,out c1);//此处a1为0,b1,c1为1,强制a1为形参,强制b1,c1为实参
{$VarByRef+}//启用允许参数修改的设定
Abcd(a1,b1,c1); //此处a1,b1,c1都被改为1
Abcd(in a1,in b1,c1); //此处a1,b1为0,c1为1,强制a1与b1为形参,c1即默认为实参。
//模型abcd
Function abcd(a,b,c);
Begin
a:=1;
b:=2;
c:=3;
End;