Table
table是由键值对(也被称为槽)构成的辅助容器;值(value)可以是任何类型,键(key)也可以是任何类型除了null类型。Table是squirrel的骨架,委托和许多其他特点的实现机制,甚至存储全局变量的整个环境也是一个表成为根表(root table)。
Construction(构建)
表可以通过表构造函数(table constructor)创建
Slot creation(槽创建)
对一个存在的表添加一个槽(slot)用操作符’<-‘,这个操作符的行为就像赋值操作,除此之外如果这个slot在表中未声明,用这个操作符可以创建此槽(slot)如:
local a={}
下面一行将引起一个异常因为槽”newslot”在表a中并不存在
a.newslot = 1234
下面的方式则可以:
a.newslot <- 1234;
or或者
a[1] <- "I'm the value of the new slot";
Slot deletion(删除槽)
exp:= delete derefexp
槽(slot)删除是通过关键字delete实现的;下面的表达式将会引起一个槽的删除:
a <- {
test1=1234
deleteme="now"
}
delete a.test1
print(delete a.deleteme); //将会打印出字符串“now”
Table constructor(表构造)
tslots := ( ‘id’ ‘=’ exp | ‘[‘ exp ‘]’ ‘=’ exp ) [‘,’]
exp := ‘{’ [tslots] ‘}’
创建一个新表
local a={} //create an empty table (创建一个空表)
一个表构造也可以包含槽(slot)的声明,用这样的语法:
id = exp [',']
一个id做为key,exp做为value的新槽(slot)被创建了
local a=
{
slot1="I'm the slot value"
}
也可以用这样的语法:
'[' exp1 ']' = exp2 [',']
exp1做为key(键),exp2做为value(值)的新槽被创建
local a=
{
[1]="I'm the value"
}
两种创建可以混合使用:
local table=
{
a=10,
b="string",
[10]={},
function bau(a,b)
{
return a+b;
}
}
在槽之间的逗号是可选择的(非必须的)
Table-built function 表操作函数
len()
返回在表容器(table)中槽(slot)的数量
rawget(key)
不用代理尝试利用key键得到一个值
rawset(key,val)
不使用delegation(代理)设定槽的key用值val,如果这个槽不存在的话,将会创建它
rawdelete()
不使用delegetion删除槽的key键,然后返回它的value值,如果这个slot不存在的话返回null值
rawin(key)
如果槽的key存在返回真(true),它的作用和操作符in有相同作用,只是此函数不使用delegation
weakref()
返回这个对象的弱引用
tostring()
尝试调用_tostring元操作,如果失败,返回”table:pointer”
Arrays
数组是存储对象的简单序列,数组(array)大小是动态的,他们的下表从0开始
local a=["I'm","an","array"]
local b=[null]
b[0]=a[2];
数组的重置大小,数组元素的插入、删除和数组本身的删除都是通过一系列定义的标准函数完成(参考built-in function)
array的操作函数
len()
返回数组的长度
append(val)
在数组末尾添加值为val的元素
extend(array)
通过给定的参数array里的元素添加扩展
pop()
从array后面删除一个值并返回此值
top()
通过下标返回数组里的值
insert(idx,val)
在数组idx下标出添加值为val
remove(idx)
移除下标为idx的值
resize(size,[fill])
重新设定array大小,如果可选参数fill已被指定值,且当新数组(array)的大小大于原来的大小时,fill的值将会被用做这个新数组(array)的槽(slots)
sort([compare_func])
对数组里德元素排序,排序比较函数通过传进的参数实现,要传进的函数协议类型像下面:
function custom_compare(a,b)
{
if(a>b) return 1
else if(a<b) return -1
return 0;
}
reverse()
逆转array中元素的位置
slice(start,[end])
返回数组的一部分作为新数组。从start复制到end(不含),如果start是负的,下标为length+start;果end是负的下标为length+start;如果end被疏漏了,end等于array的length值
weakref()
返回这个对象弱引用
tostring()
返回字符串类型