一.常量与变量
1.变量
<1>成员变量:
属于一个名字空间的成员对象。变量的默认名字空间为global,并可以使用namespace改变代码块的名字空间。可以使用self访问当前空间,使用..操作符访问globally名字空间。
name="ricky";
..str=123;//..str等价于 ..global.str
<2>局部变量:
var声明一个局部变量,作用域为当前语句块。var声明的局部变量可以指定一个初始值,也可以不指定。
var name;
name="ricky";
var a,b,c=1,2,3;
io.print(a,b,c,name);
2.常量:
常量名以下划线作为首字符,或使用::操作符将普通的变量转换为常量。
<1>成员常量:
_const=123;
<2>全局常量:
必须以”下划线+大写字母”作为起始字符
<3>转换全局常量:
可以::前缀将普通的变量强制转化为全局常量。
<4>如果常量的值是非数值对象,即不能保证每次创建的值是相同的,为避免无意中修改常量值导致异常,可使用:=操作符赋值。
::Func :=function() begin
end;
二. 数据类型
1.null(空值):将一个变量赋值为null等于删除这个变量。
2.boolean(布尔值)
true表示真、false表示假。在条件表达式中,null、数值0都认为是false。
3.number(数值)
4.string(字符串)
<1>普通字符串:放在双引号中,字符串可以包含换行。字符串换行符使用’\n’表示。
str1="welcome to china!"'
str2="first line
second line";
2.转义字符串:
放在单引号中,支持\转义符,单引号中只能以’\r\n’表示回车换行符。
str1='\tHello!';
如果单引号中仅包含一个字符,并且在后面加上#号标记,表示字符的ascii值。
'A'# 表示65
3.注释字符串:
可以将行注释、段注释作为一个字符串赋给一个变量。
str1=//this is a string
str2=/*
this is also string
*/
5.table(表)
table是AAuto中唯一的数据结构类型,用来构建有序或无序的集合。、
<1>表结构:
- 哈希表:无序集合又称字典、哈希表等,每个元素都是一个“键值对”
- 数组:数组在内存中的存储是有序的。它的下标从1开始的。
<2>构造表
用{ }操作符来构造新的table对象,并以分好”;”分隔每一个元素。
days={};
tab={x=100;"Sunday";"Monday"};//同时包括了"数组"、"字典"。
可以把多个变量用一对花括号包含起来转换为table数组,也可以通过table.unpack()函数将table数组转换为多个变量。
tab={"Ricky";"David";"Jack"};
a,b,c=table.unpack(tab);
<3>访问table成员
用元素的键作为下标查询元素的值:
tab={};
tab[1]="ricky";
tab["x"]=200;
对于符合变量命名规范的键名,可以使用”.”成员符访问。
tab["x"]=20;也可以写成tab.x=20;
<4>遍历table
遍历table列表中的全部元素:
tab={a="A";b="B";c=1;d=4};
for k,v in tab{
io.print(k,v);//k为键,v为匹配的值,在这里键、值是无序的随机出现。
}
遍历table列表中的数组元素
tab={a="A";b="B";c=1;d=4};
for i=1;#tab;1 {
print(i,tab[i]);
}
6.function(函数)
使用function关键字定义函数,使用()操作符调用函数
7.cdata(内核对象)
对象是由aauto管理的指针对象,由aauto自动管理cdata指向的内存,并在不需要的时候自动释放。
8.class(类)
使用class关键字定义类,类可以动态创建数据结构相同的table对象。
9.fiber(纤程)
fiber.create()创建并返回纤程对象。纤程类似线程,但不是线程。
三.转换数据类型
1.数值、字符串会自动转换,但是我们也可以用aauto提供的函数强制转换。
- tostring(v)
- tonumber(v)
- topointer(v)
2.使用type函数可以读取数据类型。
3.使用type.eq比较数据类型。
eq=type.eq(obj1,obj2)
比较obj1、obj2的类型、元类型、struct类型,如果完全相等就返回true。