154 lines
3.3 KiB
Plaintext
Vendored
154 lines
3.3 KiB
Plaintext
Vendored
【关键字表】
|
||
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,避免堆分配
|
||
代码块:
|
||
源码文件,编译(预处理)为代码块。代码块包含变量空间、多个代码段。
|
||
代码块是虚拟机执行单元。
|
||
代码段:
|
||
代码段是执行的基本单元。
|
||
代码段按顺序执行,或通过控制语句跳转。
|
||
代码段包含表达式、控制语句……。
|
||
代码段默认为单行,未匹配的(、{、[可以将单行拓展为多行
|
||
代码段拥有独立的作用域。
|
||
虚拟机:
|
||
动态变化的内容,维护内存数据。
|
||
表达式:
|
||
基于后缀表达式。 |