跳转至

把数组绑定到变量

(已经集成到最新的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]。

[error, session] := client_session(...);
if error then // 进行错误处理,例如退出,这时error变量的内容是错误代码,session变量的内容是错误信息。

// 没错误继续
client_call(session, .....);
...