基本数据类型及扩展
在本章中,您将会学习到:
- Sonolus.h 的基本数据类型
- 自定义数据类型
数据类型
我们预定义了部分基本数据类型,如下:
let a;
var a;
Variable<EntityMemoryId> a;
Array<EntityMemoryId, let> touchIndex(16);
Map<EntityMemoryId, let, let> touchUsed(16);
CustomClass a { ... };
let
- 表达式类型,存储一整个表达式块。
- 每次运算到这个变量时都会重新计算一次这个变量的值。
- 建议将该类型用于一些简单的计算中。
var
- 变量类型,存储一个计算好的结果,与 C/C++ 中的 double 类似。
- 可与
let
类型任意互转。 - 建议将该类型用于一些复杂的运算以加快速度。
Variable<BlockId>
- 变量类型,同
var
。 - 唯一的差别就是该类型可以指定变量存储位置,而
var
只能被存储到TemporaryMemory
块中。
- 变量类型,同
Array<BlockId, Type>(size)
- 数组类型,在
Block
中开辟一块空间,存储size
个Type
类型的变量。 - 其中
Type
只能为let
/var
/Variable<BlockId>
/CustomClass
中的一种。 - 由于未经过详细的测试,
CustomClass
作为第二参数传入,在使用时可能会出现 bug,请及时反馈给我们,我们会尽快处理!
- 数组类型,在
Map<BlockId, Type1, Type2>(size)
- 键值对类型,在
Block
中开辟一块空间,存储size
个pair<Type1, Type2>
变量。 Type1
/Type2
的限制如Array
中对Type
的限制。- 使用方法如 C/C++ 中的 STL 结构
map
。
- 键值对类型,在
CustomClass a { ... }
- 请参照后续章节。
自定义数据类型
我们深知,仅仅是这些基本数据类型,完全不足以您的使用。因此我们提供了自定义数据类型结构,供您使用。
WARNING
注意:接下来的内容为实验性内容,请谨慎使用。如有问题,请及时反馈给我们,我们会尽快处理!
下面是自定义数据类型的基本用法:
class Coordinate {
CLASSBEGIN
defineVar(var, x, 0);
defineVar(var, y, 0);
SonolusApi getDistance() {
FUNCBEGIN
Return(Sqrt(x * x + y * y));
return VAR;
}
};
类定义方法与 C/C++ 大致类似,下面是 Sonolus.h 类的不同点:
- 在每个自定义类的第一行,都需要添加
CLASSBEGIN
来标识这是一个 Sonolus.h 类 - 在 Sonolus.h 类中,您不可以使用
public
/private
修饰符 - 定义变量时,如果使用
defineVar(Type, Name, Value)
来定义,在Array
和Map
中这个变量将会被捕获并存储在内存中,否则就只是一个普通的 C/C++ 变量。 - 可以在类里定义普通变量/函数。
- 不能使用类继承功能。