跳到主要内容
版本:master

数据类型


介绍GS的基本数据类型。

GS数据类型简介

基本类型

信息

所有的类型可以视为继承自混合类型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的数值类型

    1. value_type的类型是mixed,所有已有数据类型或者自定义数据类型都可以作为value_type
  • val为变量的名字,它必须满足以下格式

    1. 由字母或者下划线开头
    2. 仅由字母,数字和下划线组成
    3. 不能与数据类型名或者系统函数名相同
  • valuesval初始化的数值,它是可选的

    1. 必须满足values的数据类型与value_type相一致
    2. 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"