aardio中只有一种数据结构,就是表,表中省略键值的,即为数组:
1.名字空间不仅是一个表,还是定义了一个语句块,在table里,只能用键和值(键值对),不允许使用变量和语句块。因为键值具有唯一性,不会出现重复的键,一个键也不可能指向多个不同的值。虽然namespace和table都是用{}来界定的,但是语句块是“最小的执行指令的代码”,一个语句由操作数(常量)、操作符(做字符串组合的++和做判断相等的==)、标识符、关键字等组成。标识符包括命名常量和变量;字面常量包括字符串和数值。语句块可以限制局部变量的作用域。
2.声明语句:包含变量声明和局部变量声明,API函数声明 。一般普通的名字空间的成员变量是不需要声明的。而局部变量是需要声明的。
3.在global下定义的变量,可以在此名字空间内任意语句块下使用,如果跨语句块,则要用global方式。详见5
4.定义一个表tabuser,如果先用namespace定义,再用table定义,那么这个tabuser会被覆盖;而反过来,namespace在后的话,namespace会现做检测,如果看到之前已定义过,则做打开操作,打开这个table,然后做附加。
5.在一个名字空间内部调用这个名字空间的属性的时候,要用self来标识当前名字空间,且访问外部的属性的,要用global或者..
即,语句块要从一个抽屉里访问自己抽屉的属性,用self,访问外部整体抽屉的属性,用global。
例如:
namespace tabuser{ a1 = "aa"; a2 = "bb"; a3 = "cc"; for (i=1;3;1){ ..console.log(self["a"+i]) } }
6.在表中,如果不指明键值,会变成数组array。数组,成员的索引键是数值,是从1开始且是连续的数的值。则就是说,有一个隐藏的[1]、[2]....这样的键值:
var list={ "aa"; "bb"; "cc"; }
相当于:
var list={ [1] = "aa"; [2] = "bb"; [3] = "cc"; }
这时候,如果用[99]这样的键值代码来指定,则可以创建一个不连续的表。但是在这种不连续的情况下计算获取这个表有多少个连续的成员的时候,会不准。
7.表的操作:
table.range(TAB)来取出最大最小索引
#TAB 来获取这个表有多少个连续的成员
table.count(TAB) 统计表中所有成员的个数。包括不连续的,但是效率很低,因为要遍历
如果只是判断这个表是不是空的,可以用table.next。
table.next(TAB) 返回下一个成员,返回一个键,一个值。
var k,v = table.next(A)
var k2,v2 = table.next(a,k)…………这样就是在不停的迭代。如果是一个空表,则什么都不会返回。相当于在if判断中,得到了“假”。
table.push(ARR,"值1",“值2”) 在数组的最后面追加参数。
table.pop(TAB,n)在数组的尾部弹出n个值。同时,n可以用来做赋值:
var k,v = table.pop(TAB,2) 移除几个函数,就会得到几个返回值。
table.insrt(ARR,“插入到n前面的值”,n) 用来在n前面插入一个值。
table.remove(ARR,n)在指定的位置移除,并返回。var a = table.remove(ARR,2)就是把ARR这个数组的第二个值移除并返回。