把数组绑定到变量
(已经集成到最新的TSL语言解释器正式版中)
语法
[变量1,变量2,... ] := 数组
在作为表达式时将使用变量1的值作为表达式的计算结果,例如在函数调用参数中使用:
MyFunc(1, [x, y]:=array(1,2));
这时,MyFunc的第二个调用参数的值就是x,值为1。
运行结果:
变量1 = 数组[0],变量2 = 数组[1],....
范例
[x, y] := array(1,2);
// x = 1, y = 2
[x, y] := my();
// x = "a", y = "b"
[x, y] := my2();
// x = "c", y = "d"
[x, y, z] := my3(x:=1, [y,z]:=array(2,3), z);
// x = 1, y = 2, z = 3
[x, y, z] := 1;
// 报错,右值必须是数组类型。
function my();
begin
return array("a", "b");
end;
function my2();
begin
return array("c", "d", "e");
end;
function my3(x,y,z);
begin
return array(x, y, z);
end;
注意:并没有要求变量的个数等于数组的长度。
在if和while语句中应用的范例
// 假设数组[0]来做错误标识,非0表示有错误发生
if [error, _] := occurError() then // occurError发生错误了....
if [error, _] := shouldOK() then // 因为shouldOK没错误,所以不会进入这里
if not ([error,_]:= shouldOK()) then // 含义是如果没发生错误,就....
function occurError();
begin
return array(1, "Error");
end;
function shouldOK();
begin
return array(0, "OK");
end;
用例
在我设计的很多插件中,函数都会返回一个数组,如果数组[0]是0就代表没有错误,否则就是有错误发生,所以这个语法会帮助到这样的场景:
例如client_session(host, port, user, password, proxy) 如果发生错误,返回数组[错误代码,错误信息],否则返回数组[0,会话ID]。