Squirrel 文档翻译(Execution Context)

来源:互联网 发布:淘宝客用手机可以做吗 编辑:程序博客网 时间:2024/06/05 14:42

执行上下文:

所谓的执行环境,是指函数执行的堆栈帧和函数的上下文环境(this),函数的堆栈帧是栈的一部分,用来存放函数内部局部变量存放的地方。函数的上下文环境是被函数的调用者作为隐含参数传递给函数(看Functions). 在执行过程中,函数体透明的引用他的执行上下文环境,也就是一个简单的标识符既可以指向局部变量,也可以指向一个环境对象槽。全局变量需要特定的语法。环境对象可以被this显式的访问。

 

变量:

Squirrel中有两类变量,局部变量和表/数组槽。因为全局变量存放在一个表中,所以它是槽。

 

一个简单标识符可以指向局部变量或者环境对象中的槽。

derefexp := id;

_table["foo"]_array[10]

对于表,我们可以用“.”语法:

derefexp := exp '.' id

_table.foo

 

对于一个标识符,Squirrel会首先检查它是否是局部变量(函数参数或者局部标量),如果不是,它会检查该标识符是否是环境对象的成员(this)。

 

比如:

function testy(arg)
{
    local a=10;
    print(a);
    return arg;
}

 

会访问局部变量a,打印出10

function testy(arg)
{
    local a=10;
    return arg+foo;
}

这种情况,foo等同于“this.foo”或者this["foo"].

 

全局变量存放在被称为“root table”的表中。通常情况下,在全局范围里,环境对象就是root table。但是可以在其他的范围里显式的访问全局表,槽命必须加前缀'::' (::foo).

exp:= '::' id

比如

function testy(arg)
{
    local a=10;
    return arg+::foo;
}

访问全局变量foo。

 

然而(自从squirrel 2.0),如果一个变量不是局部变量并且在“this”对象中找不到,Squirrel会在全局表中查找。

function test() {
foo = 10;
}
等同于:

function test() {
  if("foo" in this) {
 this.foo = 10;
 }else {
 ::foo = 10;
 }
}