【关键字表】 function 定义函数 param 函数参数 typeof 变量类型,返回字符串 is_null 变量为空,等价 typeof == "null" operator操作符重载 return 函数返回值 new 定义 if elseif else while for goto 【内置函数表】 print 打印字符串 param 函数参数 var 定义全局变量 【变量】 分类: 变量分为局部变量和全局变量。 全局变量以g_开头。示例如下: a = 0 // 局部变量 a g_a = 1 // 全局变量 g_a 类型: null 空 int 整数 float 浮点 string 字符串 class 类 vector 数组 table 表 function 函数 userdata 指针 expr 表达式 【函数】 分类: 函数分为内置函数、导入函数、脚本函数。 内置函数,由引擎提供的函数,例如print、strlen等基础函数。 导入函数,通过C++层导出的函数。 脚本函数,由脚本定义的函数。 定义: 脚本内只能定义脚本函数,以function关键字开始,参数通过关键字param获得。示例如下: function add = { print("参数0为:{}", param[0]) print("参数1为:{}", param[1]) print(param[0] + param[1]) } add(1, 2) 调用: 参数数量为1时可以不加括号,其余情况需要加括号 【表达式】 包含操作符的语句 +、-、*、/ 基础运算,class可使用operator重载 % 求模 ++、-- 自增自减,class可使用operator重载 >、<、>=、<= 大小判断 # 长度计算(字符串为实际字符数,容器为长度) == 相等判断 ! 逻辑取反,非0为true &&、|| 逻辑与或 算术运算: float和int可以进行算术运算 【作用域】 以{}包含一个作用域,作用域内的局部变量,超出作用域会删除 【数组】 以()生成一个数组,包含0到N个变量。 通过[index]下标访问 【表】 以table()生成一个表,包含0到N个变量。 通过._key键访问 【类】 通过class定义。通过.访问成员,构造函数与类名相同,示例如下: // 类 class Dot { x y function Dot = { x = param[0] y = param[1] } function Print = { print fmt("{},{}", x, y) } operator+ = { a = param[0] b = param[1] return new Dot(a.x + b.x, a.y + b.y) } } dot0 = new Dot(100, 200) dot1 = new Dot dot1.x = 100 dot1.y = 200 dot2 = dot0 + dot1 dot2.Print() 【控制语句】 if,条件语句,示例如下: if _a < 0 { print "值小于0" }else if _a > 0 { print "值大于0" }else{ print "值等于0" } for,循环语句,示例如下: for (i, i < 10, ++i){ print i } while,循环语句,示例如下: while i < 10 { ++i if i < 5 break } break,continue跳出语句,功能与C++一致 【导入函数】 【实现细节】 局部变量使用固定内存,避免堆分配 函数参数基于固定vector,避免堆分配 代码块: 源码文件,编译(预处理)为代码块。代码块包含变量空间、多个代码段。 代码块是虚拟机执行单元。 代码段: 代码段是执行的基本单元。 代码段按顺序执行,或通过控制语句跳转。 代码段包含表达式、控制语句……。 代码段默认为单行,未匹配的(、{、[可以将单行拓展为多行 代码段拥有独立的作用域。 虚拟机: 动态变化的内容,维护内存数据。 表达式: 基于后缀表达式。