Squirrel文档翻译(表达式1)

 

赋值(=)和新槽(<-

exp := derefexp '=' exp

exp:= derefexp '<-' expSquirrel实现了两种赋值形式:常用的赋值(=)a=10;

以及“新槽”赋值形式。

a <- 10;

“新槽”赋值表达式允许向表中增加一个新槽,如果表中已经存在这个槽,他的功能就和常用的等号表达式功能一样。


操作符(Operators

?: 操作符

exp := exp_cond '?' exp1 ':' exp2

根据表达式“exp_cond”的值计算最终的表达式结果。


算数操作符(Arithmetic

exp:= 'exp' op 'exp'

Squirrel支持标准的算数操作符 +, -, *, / %。除此外,它也支持紧凑式算数运算符以(+=,-=,*=,/=,%=)及自增,自减运算符(++ and --)

a+=2;

//相同于

a=a+2;

x++

//相同于

x=x+1

以上所有的运算通常情况下都和整形和浮点型一起使用;如果一个操作数是整型,一个是浮点型,其结果将是浮点型。而+运算符有个特殊功能,可以用于字符串。如果一个操作数是字符串,那么+运算符将会尝试把两外一个操作数转换成字符串,并且将他们链接在一起。对于实例(instances)和表,该操作符会调用其_tostring方法。


 

关系运算符(Relational)

exp:= 'exp' op 'exp'

Squirrel中的关系运算符有:== < <= > >= !=

如果表达式为假,该运算符返回null,反之返回非null。在虚拟机内部用1作为真,但是这在将来可能会改变。

 

逻辑运算符(Logical

exp := exp op exp

exp := '!' ex


Squirrel中的逻辑运算符有:&& || !如果表达式第一个单元是null,则运算符&&(逻辑与)返回null,否则返回它第二个参数值。而||运算符,如果第一个参数不是null的时候返回第一个参数。值,否则返回第二个参数。!运算符当被操作数为null的时候返回非null。反之回null

 

 

in运算符

exp:= keyexp 'in' tableexp

检测表中是否存在这个槽,如果keyexp是表中一个有效得键值,那么该表达式返回非null

 

local t=

{

    foo="I'm foo",

    [123]="I'm not foo"

}

 

if("foo" in t) dostuff("yep");

if(123 in t) dostuff();

 

instanceof 运算符

exp:= instanceexp 'instanceof' classexp


测试这个类的实例是否是另外一个特定类的实例。如果是返回非null

typeof 运算符exp:= 'typeof' exp

以字符串的形式返回值的类型。

local a={},b="squirrel"

print(typeof a); //打印 "table"

print(typeof b); //打印"string"

 

逗号表达式

exp:= exp ',' exp

逗号表达式从左到右计算两个表达式的值,其结果是最右边表达式的计算结果,左边的被忽略。local j=0,k=0;

for(local i=0; i<10; i++ , j++)

{

            k = i + j;

}

local a,k;

a = (k=1,k+2); //a 变成3

 

按位操作符

exp:= 'exp' op 'exp'

exp := '~' exp

Squireel支持c形式的位运算符&,|,^,~,<<,>>以及无符号的右移运算符>>>. 该无符号右移运算符除了把左操作符当做无符号整型处理外,

其和通常的右移运算符(>>)一样。因此它不会受符号的影响。这些操作符只对整型有效,如果使用其他类型的值,改运算符将会抛出异常。

 

 

表构造器

tslots := ( ‘id’ ‘=’ exp | ‘[‘ exp ‘]’ ‘=’ exp ) [‘,’]

exp := ‘{’ [tslots] ‘}’


创建一个新表:

local a={} //创建一个空表

表构造器也可以包含一个新槽,语法:

id = exp [',']

一个以id作为key,以exp作为值的新槽将被创建。

local a=

{

    slot1="I'm the slot value"

}

 

另外一种语法:

'[' exp1 ']' = exp2 [',']


一个以exp1

作为key,以

exp2

作为值的新槽将被创建。

两种语法可以被混合使用:

local table=

{

    a=10,

    b="string",

    [10]={},

    function bau(a,b)

    {

        return a+b;

    }

}

槽之间的逗号是可选的。


delegate委托

exp:= delegate parentexp : exp

 

设置表的父元素。parentexp的值被设置为exp的结果的父元素。该表达式的结果是exp本身.

 

clone克隆

exp:= ‘clone’ exp

 

克隆完成对表,数组,类实例的深拷贝(非递归的拷贝所有的槽到新的对象中)。如果源表中含有委托,将会给新表委托相同的委托(不拷贝) Delegation). 当新的对象创建之后,元方法"_cloned“被调用(看Metamethods)。当类的实例被克隆的时候,新对象的构造器是不会被调用(其初始化操作依赖于_cloned)

 

数组构造器

exp := ‘[’ [explist] ‘]’


 

创建一个数组

a <- [] //创建一个空的数组

数组可以在构造的时候初始化值

a <- [1,"string!",[],{}] //创建一个含有四个元素的数组。


表是以键值对形式实现的关联容器(键值对叫做槽);值可以为任意形式,键可以是出”null“之外的任何类型。表是Squireel的核心,委托以及其他很多特性都是通过表的形式实现的。还有环境变量存储也是个表(被称作root表)

 

 

表可以通过表构造器创建(看Table constructor


创建槽

通过操作符"<-"在已知的表中添加新槽;”<-“操作符除了在槽不存在的时候创建槽这个功能外,其他和普通赋值运算符没有区别。

local a={}

下面这行将会触发一个异常,因为在表”a“中不存在名为”newslot“的槽。

a.newslot = 1234

正确的做法是:

newslot <- 1234;

或者

a[1] <- "I'm the value of the new slot";

 

删除槽

exp:= delete derefexp

 

通过关键字”delete“删除一个槽,该表达式的计算结果是被删除槽的值。

a <- {

    test1=1234

    deleteme="now"

}

 

delete a.test1

print(delete a.deleteme); //this will print the string "now"

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丑娃儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值