数据类型
介绍GS的基本数据类型。
GS数据类型简介
基本类型
GS是面向对象的脚本语言,语法类似于C,其内置了几种数据类型
信息
所有的类型可以视为继承自混合类型mixed, 而枚举类型(enum)继承自int,扩充类型object则继承自handle。
备注
GS内置类型继承关系示意图
mixed -+-- nil
|
+-- void
|
+-- bool
|
+-- int -+-- bool
| |-- enum
+-- float
|
+-- string
|
+-- buffer
|
+-- array
|
+-- map -+-- class_map
|
+-- function
|
+-- handle -+-- object
| |
| +-- domain
| |
| +-- coroutine
| |
| +-- timer
| |
| +-- socket
| |
| +-- share_value
| |
| +-- device
| |
| +-- sync_object
|
+-- struct -+-- bigint
|
+-- vector2
|
+-- vector3
|
+-- vector4
|
+-- matrix4
类型的定义
数据类型的基本语法格式:
value_type val = values;
格式解释:
-
value_type
表示val
的数值类型value_type
的类型是mixed
,所有已有数据类型或者自定义数据类型都可以作为value_type
-
val
为变量的名字,它必须满足以下格式- 由字母或者下划线开头
- 仅由字母,数字和下划线组成
- 不能与数据类型名或者系统函数名相同
-
values为
val
初始化的数值,它是可选的- 必须满足values的数据类型与
value_type
相一致 - values可以是强制类型转换过来的值
- 必须满足values的数据类型与
类型的判断
GS中内置了一个外部函数,可以对mixed类型进行判断,函数原型如下:
string mixed.type_name()// return 类型的string格式
基本用法:
int i = 1234;
write(i.type_name()); // 输出 "int"
array arr = [1, "hello", 3.14];
write(arr.type_name()); // 输出 "array"
类型的强制转换
- bool 强制转换成 int true -> (int) 1 false -> (int) 0 转换方式
bool flag = true;
write("flag == ",(int)flag, "\n");
write("!flag == ",(int)!flag, "\n");
输出
flag == 1
!flag == 0
- int 强制转换成 bool 只有int 为0或1时,才会转为bool类型,其他情况保持int原值。
int n = 1;
int m = 2;
int l = 0;
int k = -1;
write("\nl=0,bool=",(bool)l);
write("\nm=2,bool=",(bool)m);
write("\nn=1,bool=",(bool)n);
write("\nk=-1,bool=",(bool)k);
输出
l=0,bool=false
m=2,bool=2
n=1,bool=true
k=-1,bool=-1
-
float 转为 int 会发生截断,取整数值,不存在四舍五入
-
string 转为 int
string str = "1024";
int val = int.parse(str); // val = 1024
- int 转为 string
int val = 1024;
string str = val.to_string(); // str = "1024"
- string 转为 float
string str = "3.14";
float val = float.parse(str); // val = 3.14
- float 转为 string
float val = 3.14;
string str = val.to_string(); // str = "3.14"