functional可一次返回多个值吗
functional js(a,b:string):string //只能返回一个值
调用函数时怎样才能返回多个值?
问题点数:20、回复次数:7Top
1 楼UC80862056(Alizee艾莉婕的粉丝)回复于 2005-08-18 03:27:47 得分 0
使用变参,即用var声明的参数。也叫传址参数。Top
2 楼zzlingaaa(小舟)回复于 2005-08-18 07:36:12 得分 5
funcation js(a,b: string; var c,d: string): string;
c,d也可以做为"返回值"Top
3 楼hangguojun(布丁)回复于 2005-08-18 07:56:21 得分 5
functional,funcation也是函数关键字吗?
郁闷中...
function js(a,b: string): array of string; // 这样也可以
Top
4 楼konhon(优华)回复于 2005-08-18 08:05:46 得分 5
可以返回數組或類對象呀.
數組和類對象都可以包含多個值的.
返回數組,好像要這樣:
Type
TStringArr = Array of String;
function js(a,b: string): TStringArr; // 这样也可以
Top
5 楼Itfeng()回复于 2005-08-18 17:27:32 得分 0
引用:使用变参,即用var声明的参数。也叫传址参数。
funcation js(a,b: string; var c,d: string): string;
这里声明的C和D不是全局变量,在这里声明能返回给另外的窗体吗?
数组应该可以,如果这样function js(a,b: string): array of string;
那调用函数后,返回的多个值又怎样赋予其它变量呢?
调用x:=JS('AA','bb')后,假如返回了多个值'dd'和'ee',那x这时赋予了什么?是否要把X定义成数组!
Top
6 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2005-08-18 18:20:53 得分 5
要类似lua语言那样的一次性返回多个变量,可以“模拟”出来:
定义一个类型和一个函数:
type
TValues=array of variant;
function _V(args:array of const):TValues;
var rec:TVarRec;
i:Integer;
begin
SetLength(Result,Length(args));
i:=0;
for rec in args do
begin
case rec.VType of
vtInteger :Result[i]:=rec.VInteger ;
vtBoolean :Result[i]:=rec.VBoolean;
vtChar :Result[i]:=rec.VChar;
vtExtended :Result[i]:=rec.VExtended^;
vtString :Result[i]:=rec.VString^;
vtPChar :Result[i]:=String(rec.VPChar);
vtWideChar :Result[i]:=rec.VWideChar;
vtPWideChar :Result[i]:=WideString(rec.VPWideChar);
vtAnsiString :Result[i]:=String(rec.VAnsiString);
vtCurrency :Result[i]:=rec.VCurrency^;
vtVariant :Result[i]:=rec.VVariant^;
vtWideString :Result[i]:=WideString(rec.VWideString);
vtInt64 :Result[i]:=rec.VInt64^;
//不支持的类型
// vtInterface :Result[i]:=rec.VInterface;
// vtPointer :Result[i]:=Variant(rec.VPointer);
// vtObject :Result[i]:=rec.VObject;
// vtClass :Result[i]:=rec.VClass;
end;
Inc(i);
end;
end;
使用例子:
function Calculate(a,b:Integer):TValues;
begin
result:=_V([ a+b , a-b , a*b , a div b ]);
end;
var results:TValues;v:Variant;
begin
Results:=Calculate(6,2);
for v in results do
writeln('Result:',v);
end.
等价于lua的:
function Calculate(a,b)
return a+b,a-b,a*b,a/b
endTop
7 楼Itfeng()回复于 2005-08-18 21:23:59 得分 0
谢谢楼上,不过这样也太有点~~~,有点晕...呀Top




