Files
dl/document/other/脚本设计文档.txt
2026-09-16 14:07:40 +08:00

154 lines
3.3 KiB
Plaintext
Vendored
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
【关键字表】
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
}
breakcontinue跳出语句,功能与C++一致
【导入函数】
【实现细节】
局部变量使用固定内存,避免堆分配
函数参数基于固定vector,避免堆分配
代码块:
源码文件,编译(预处理)为代码块。代码块包含变量空间、多个代码段。
代码块是虚拟机执行单元。
代码段:
代码段是执行的基本单元。
代码段按顺序执行,或通过控制语句跳转。
代码段包含表达式、控制语句……。
代码段默认为单行,未匹配的(、{、[可以将单行拓展为多行
代码段拥有独立的作用域。
虚拟机:
动态变化的内容,维护内存数据。
表达式:
基于后缀表达式。