常量
const常量和enum枚举
const常量类型
常量使用关键字 const 定义,用于存储不会改变的数据。
存储在常量中的数据类型可以是bool, int,string,map等。
常量的定义格式:const [type] identifier = value
例如
const map EQUIP_NAME = {
"weapon":"武器",
"cloth" : "防具",
"accessories" : "饰品",
"shoes" : "鞋子",
"fabao" : "法宝",
"gubao" : "古宝"
};
const string str = "Hello World";
常量的值必须是能够在编译时就能够确定的;你可以在其赋值表达式中涉及计算过程,但是所有用于计算的值必须在编译期间就能获得。
正确的做法:const int c1 = 2+3 错误的做法:const int c2 = getNumber()
enum枚举类型
enum 是枚举类型,是int的子类型,主要是将相同类别不同特征的一类东西放在一起,方便取值调用。 enum 的type_name是map,其功能与map有点类似(key是特征名,val是int类型数值,默认从0递增),用法与C类似。 enum的基本语法格式如下:
// 无描述enum
enum enum_name
{
value1 = constant1,
value2 = constant2,
value3 = constant3,
...
}
// 有描述enum
enum enum_name
{
value1 = constant1:"enum_memo_str1",
value2 = constant2:"enum_memo_str2",
value3 = constant3:"enum_memo_str3",
...
}
- 注意:
- enum_name是 enum 的名称,必须是一个合法的标识符
- valueN 是枚举项,也应当是一个合法的标识符,通常使用大写蛇形命名法,以便于区分。
- constantN 是枚举项的值,如果不指定,则为上一个枚举项的值加1。如果是首个枚举项,则为0。
- enum_memo_str 是枚举项的描述,通常是字符串类型的常量,可以不指定。
enum 类型都有对应的信息表,定义的枚举类型名称本身就是此常量表。可以通过此常量表获取枚举的相关信息:
enum AAA
{
aaa = 1:"aaa",
bbb = 2,
ccc = 3,
}
write(AAA);
// 输出如下:
// { /* sizeof() == 4 */
// "__reverse_enum_map__" : { /* sizeof() == 2 */
// 1 : "aaa",
// 2 : "bbb",
// },
// "__memo__" : { /* sizeof() == 1 */
// AAA.aaa(1) @ /test/test.gs : "aaa",
// },
// "aaa" : AAA.aaa(1) @ /test/test.gs,
// "bbb" : AAA.bbb(2) @ /test/test.gs,
// }
举个一般的enum例子:
enum State
{
IDLE = 10,
RUN,
WAIT = 35,
EAT,
DRINK,
};
bool falg = (State.IDLE == 10); // flag = true
此时 State对应的value和constant分别为:
"IDLE" : 10,
"RUN" : 11,
"WAIT" : 35,
"EAT" : 36,
"DRINK" : 37,
带有注释enum例子:
enum AAA
{
aaa = 1:"aaa",
bbb = 2:"bbb",
ccc = 3,
}
write(AAA);
此时输出如下:
{ /* sizeof() == 5 */
"__reverse_enum_map__" : { /* sizeof() == 3 */
1 : "aaa",
2 : "bbb",
3 : "ccc",
},
"__memo__" : { /* sizeof() == 2 */
AAA.aaa(1) @ /test/test.gs : "aaa",
AAA.bbb(2) @ /test/test.gs : "bbb",
},
"aaa" : AAA.aaa(1) @ /test/test.gs,
"bbb" : AAA.bbb(2) @ /test/test.gs,
"ccc" : AAA.ccc(3) @ /test/test.gs,
}
enum常用的外部函数
下面列出enum类型一些常用的外部函数以及用法(基于以上State)。
1. 特征名
函数原型:
mixed get_enum_name(string enum_name, int val)
使用方 法:
get_enum_name("State", 11); // 得到 RUN
2. 特征信息
函数原型:
mixed get_enum_info(string enum_name, mixed key_or_val)
使用方法:
get_enum_info("State", 10); // 输出在表格下面
3. 所有数据
函数原型:
mixed get_enum_data(string enum_name, mixed enum_module = nil)
使用方法:
get_enum_data("State"); // 输出在表格下面
4. 是否enum
函数原型:
bool is_enum(mixed val)
使用方法:
bool flag = is_enum(State.IDLE); // flag = true
备注
第2项输出为:
{ /* sizeof() == 2 */
"name" : "IDLE",
"value" : State.IDLE(10) @ /simple.gs,
}