EnumValue是一种特殊类型,它与所有枚举实例相统一。HAXE标准库使用它为所有枚举实例提供特定的操作,并且可以在API需要枚举实例而不是特定实例的情况下相应地用于用户代码中。

enum Color {Red;Green;Blue;Rgb(r:Int, g:Int, b:Int);
}class Main {static public function main() {//var ec:EnumValue = Red; // validvar ec = Red;trace(ec);var en:Enum<Color> = Color; // validtrace(en);// Error: Color should be Enum<Color>//var x:Enum<Color> = Red;}
}

枚举由enum关键字表示,并包含一个或多个枚举构造函数。枚举构造函数可以包含任意数量的构造函数参数。

// Describes a type of item that can be rewarded
enum ItemType {Key;Sword(name:String, attack:Int);Shield(name:String, defense:Int);
}// Describes a type of reward that can be given
enum RewardType {Gold(value:Int);Experience(value:Int);Item(type:ItemType);
}

有两种方式创建enum

1、构造法

var gold = RewardType.Gold(123);
var experience = RewardType.Experience(456);
var item = RewardType.Item(ItemType.Key);

2、enum tool法

 这个前提是using haxe.EnumTools
// Creates Sword item type with name Slashy and strength 100
var createdByName = ItemType.createByName("Sword", ["Slashy", 100]);
// Creates Key item type, as it is the first constructor specified
var createdByIndex = ItemType.createByIndex(0);

-----------------------------------

enum使用案例

package;using haxe.EnumTools;/*** ...* @author hw*/
enum ItemType{Key;Sword(name:String, attack:Int);Shield(name:String, defense:Int);}// Describes a type of reward that can be givenenum RewardType{Gold(value:Int);Experience(value:Int);Item(type:ItemType);}
class Main
{static function main(){var reward= RewardType.Item(ItemType.Sword("Slashy", 100));switch (reward){case RewardType.Gold(value):trace('I got $value gold!');case RewardType.Experience(value):trace('I got $value experience!');case RewardType.Item(type):switch (type){case ItemType.Key:trace('I got a key!');case ItemType.Sword(name, attack):trace('I got "$name", a sword with $attack attack!');case ItemType.Shield(name, defense):trace('I got "$name", a shield with $defense defense!');}}// Gets enum name, including pathvar enumName = ItemType.getName();trace(enumName);//输出的'ItemType'// Gets array of constructor names for provided enumvar enumConstructorNames = RewardType.getConstructors();// 官方教程可能比较老,用的是//getNames(),3.4.7版本后应该没有这个方法了trace(enumConstructorNames);//输出的是RewardType中的三个成员,是数组}
}

案例改自官方教程。我看了一下源码,官方的教程的版本不对(可能是教程版本比较老,我现在所使用的是3.4.7),首先已经没有getNames的方法,取代的是getConstructors()

其次,也不能 using haxe.EnumValueTools; 因为这个现在是内部类无法被外部引用。

--------------------------------------

EnumValueTools(改成内部类)

using haxe.EnumTools;/*** ...* @author hw*/enum ItemType
{Key;Sword(name:String, attack:Int);Shield(name:String, defense:Int);
}// Describes a type of reward that can be given
enum RewardType
{Gold(value:Int);Experience(value:Int);Item(type:ItemType);
}
class Main
{static function main(){var item = ItemType.Shield("Shieldy", 100);var constructorName = item.getName();trace(constructorName);
// Gets enum instance constructor indexvar constructorIndex = item.getIndex();trace(constructorIndex);
// Gets enum instance constructor argumentsvar constructorArguments = item.getParameters();trace(constructorArguments);var otherItem = ItemType.Sword("Slashy", 100);
// Compares two enum instances recursivelyif (item.equals(otherItem)) trace("Items are equal!");
// Matches enum instance against patternif (otherItem.match(ItemType.Shield(_, _))) trace("Other item is a shield!");}
}

haxe使用enum相关推荐

  1. HaXe学习笔记:HaXe语言和其它编程语言的区别

    以前发在百度空间里的,目前看来可能不够精确,仅供大家参考. ================================================================ 老实说,h ...

  2. haxe 第二期 入门篇 (转载)

    文章很长很长但是讲的很详细,可以系统全面的了解haxe 一种语言, 适合任何时候使用 - Haxe特性杂谈 这里是原文:http://blog.csdn.net/vagrxie/article/det ...

  3. haxe 第一期 入门骗 (谷歌翻译+转载)

    /*     欢迎在15分钟内学习Haxe 3.http://www.haxe.org     这是一个可执行的教程.    您可以使用haxe编译器编译并运行它,    而在与LearnHaxe.h ...

  4. haxe, haxelib, nekotools 三个命令

    layout title date categories post 各种命令及参数(包含库管理) 2014-03-30 14:10:10 -0700 haxe 主要描述 haxe, haxelib, ...

  5. Haxe手册摘要 一. 类型

    类型 不需要像C++或者AS3那样额外声明类型,编译器可以自己识别,如: var myButton = new MySpecialButton(); // Haxe Haxe类型系统中有七种类型: C ...

  6. C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量)

    在 C++ 中,常量类似于变量,只是不能修改.与变量一样,常量也占用内存空间,并使用名称标识为其预留的空间的地址,但不能覆盖该空间的内容. 常量可以是任何的基本数据类型,可分为整型数字.浮点数字.字符 ...

  7. 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)

        新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. ...

  8. [C#] enum 枚举

    默认情况下,枚举第一个值是0, 可显式为枚举赋值. 可以定义枚举的基础类型,如enum E : short {}, sizeof(E) == 2:默认情况下是int. 枚举的继承链:ValueType ...

  9. C# Idioms: Enum还是Enum Class(枚举类)

    原文排版格式:http://www.marshine.com) reversion:2004/5/28 修改说明:感谢Ninputer提到的CLS兼容问题,同时修改了原来版本没有提及的Equals改写 ...

最新文章

  1. Citrix Receiver For Linux 预览版
  2. MYSQL 练习题
  3. java s0 s1_业余草告诉你Java GC 变量含义(S0 S1 E O P YGC YGCT FGC FGCT G
  4. 2020-12-08 tensorflow model.fit_generator()函数参数
  5. 第3章:Kubernetes监控与日志管理
  6. 10 个实用的 GitHub 插件
  7. 缓存最关心的问题是什么
  8. Web项目--------原Oracle数据库的项目同时兼容MySql
  9. 医疗保险管理系统设计 Java
  10. vs c语言绘图函数,C语言图形编程(绘图函数部分)
  11. otn与stn网络_光通信网络
  12. [GYCTF2020]Easyphp
  13. homeassistant添加米家空调伴侣
  14. 终点条件下的轨迹预测:It is not the Journey but the Destination: Endpoint Conditioned Trajectory Prediction
  15. Qt获取大华摄像头监控画面(RTSP流方式)
  16. 运行nrm包 nrm ls 时报错无法查询到可选择的镜像源地址的问题及解决方法
  17. 谈谈System类,再细细品味 垃圾回收机制System.gc()
  18. uniapp微信小程序支付券或商家券插件
  19. 记一次JVM故障排除
  20. Python Strip()使用详解

热门文章

  1. java 文件存储 搜索_Java并发(Runnable+Thread)实现硬盘文件搜索功能
  2. 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-965 进击的青蛙
  3. 流行快餐 —— 破解快速时尚产品成功之道
  4. 智能家居的智能锁:如何确保家庭安全?
  5. pandas ExcelWrite 调用超链接: 引用无效
  6. 北师大网络教育计算机作业四,北师大计算机离线作业之网络设置作业
  7. 理想国Java学生管理系统实战教程+源码
  8. PHP数组相关函数运用 - 跳水比赛
  9. 找到时代的进化之道,避免数字化沦为互联网的附庸
  10. 星型结构 和 雪花型结构区别