您的位置:首页 > 产品设计 > UI/UE

Squirrel脚本中的table和array

2011-04-05 01:37 99 查看
squirrel脚本是类lua脚本的脚本语言,同样是个开源的项目,其主要寄生与C++高级语言,也是面向对象编程的语言!该语言有许多特性,其table结构和array结构最为常用,除此还有class,classinstance结构,此处只对table和array的特性做介绍,具体的可参考 其官方网站的帮助文档!下面所描述均根据帮助文档而来,如有侵权请联系我!

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()

返回字符串类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: