Haxe手册摘要 一. 类型
来源:互联网 发布:mac office2016破解版 编辑:程序博客网 时间:2024/06/04 18:50
类型
不需要像C++或者AS3那样额外声明类型,编译器可以自己识别,如:
var myButton = new MySpecialButton(); // Haxe
Haxe类型系统中有七种类型:
- Class instance: 类或接口对象
- Enum instance: Haxe枚举值
- Structure: 匿名的结构体,如一个带名字的域集合
- Function: 函数,有几个参数和一个返回值
- Dynamic:一个通用类型可以用于任何类型
- Abstract:编译时的类型,用于代表运行时的一个不同类型
- Monomorph: 未知类型,也许晚些时候会变成不同的类型
Compound Type: 复合类型,一种带有子类型的类型
基本类型
三种基本类型
- Bool: ture false
- Int: 0, 1, -1, 0xFF0000…
- Float: 1.0, 0.0, 1e10…
数字类型
Float 和 Int, 整形可以隐式转换为浮点型,反之不可以
溢出
因性能原因,Haxe编译器不检查任何溢出。因此Java,C++这样的语言和JS,PHP这样的目标语言是不同的。但haxe.Int32和haxe.Int64类可用来保证正确的溢出处理。
数字操作符
算术运算:加加,减减,加减乘除,取模
比较运算:==, !=, <, <=, >, >=
位运算: 与&或|非~,异或^,左<<右>>移,无符号右移>>>
平等运算:用于枚举 MyEnum.A == MyEnum.A, a.equals(b)
布尔运算
与&&或||非!
复合运算中有短路效应
Void
意思是没有种类。如函数没有返回值的情况。
Nullaility
Haxe变量是否可以为空。
静态目标语言如C++, Java的基本类型都是不可以为空的,有默认值
动态目标语言如JS,PHP则可以
如果想让基本类型支持空值,这样写:
var b:Null<Int> = null;
可选参数和Nullability
// x is a native Int (not nullable)function foo(x : Int = 0) {}// y is Null<Int> (nullable)function bar( ?y : Int) {}// z is also Null<Int>function opt( ?z : Int = -1) {}
注意Haxe中argument 和parameter 不同。前者用于函数,后者用于类型
类对象
例子:
class Point { var x : Int; var y : Int; public function new(x,y) {//constructor this.x = x; this.y = y; } public function toString() {//normal method return "Point("+x+","+y+")"; }}
构造函数
构造函数的调用例子:
var p = new Point(-1, 65);
继承
使用extends关键字来继承,例如:
class Point3 extends Point { var z : Int; public function new(x,y,z) { super(x,y);//call parent constructor this.z = z; }}
注意:子类可以不定义构造函数,但如果定义了就必须调super(),而且不像其他语言(如java)super可以在构造函数的任意位置而不是第一行调用。
子类可以覆盖父类的函数, 但需要override关键字。
接口
使用关键字interface来定义,例:
interface Printable { public function toString():String;}
使用implements关键字来表示实现:
class Point implements Printable { }
支持多重实现,但要多个implements 关键字:
class Point implements Printable implements Serializable
也支持变量定义(但貌似实现类里的相应变量不像java一样是static的。)
支持多重继承接口
interface Debuggable extends Printable extends Serializable
注:Haxe 2像java一样使用逗号分隔interface,但是从3.0开始不一样了。
枚举对象
例:
enum Color { Red; Green; Blue; Rgb(r:Int, g:Int, b:Int);}
例子中大括号里面都是构造函数,其中Rgb是带参数的。
枚举构造函数
var a = Red;var b = Green;var c = Rgb(255, 255, 0);
EnumValue是一种特殊类型,用于表示所有的枚举类型
enum Color { Red; Green; Blue; Rgb(r:Int, g:Int, b:Int);}class Main { static public function main() { var ec:EnumValue = Red; // valid var en:Enum<Color> = Color; // valid // Error: Color should be Enum<Color> //var x:Enum<Color> = Red; }}
匿名结构体
(有点像JSON格式)
class Main { static public function main() { var myStructure = { x: 12, name: "foo"}; }}
类型定义:
typedef Point = { x : Int, y : Int }class Path { var start : Point; var target : Point; var current : Point;}
也可以从其他结构体“继承”
typedef Point3 = { > Point, z : Int }
也可以用JSON格式来定义,可以使用字符串定义属性名,但必须符合Haxe变量命名规范。
var point = { "x" : 1, "y" : -5 };
性能影响
使用结构体时,如果目标语言是动态语言,对性能没有影响,如果是静态语言,动态寻找比静态成员变量访问要慢。
自从Haxe3.1.0起,结构体支持多继承。
函数类型
$type是一个特殊的标识符,用于输出编译时表达式的种类
可选参数
声明时加个问号。
static function test(?i:Int, ?s:String) { return "i: " +i + ", s: " +s; }
默认参数值
声明时赋予一个常量作为默认值
static function test(?i = 12, s = "bar") { return "i: " +i + ", s: " +s; }
动态类型
Haxe有静态类型系统,但可以通过Dynamic类型来关闭。
动态类型应该尽量少用,大多数情况下都不需要。
抽象类型
这是一个编译时特性。//TODO 还没看明白
例子:
abstract AbstractInt(Int) { inline public function new(i:Int) { this = i; }}
Monomorph(单语素?)
//TODO 也还没看明白
- Haxe手册摘要 一. 类型
- haXe
- haXe
- 《项目经理案头手册》摘要
- makefile 手册摘要
- Haxe学习笔记(一) Haxe:一次编码全平台编译的神话
- [HAXE] haxe接入IOS版FacebookSdK以及iOS开发遇到的问题总结(一)
- C 存储类型摘要
- Python学习笔记摘要(一)类型 字符串 函数 列表 深浅拷贝
- XHTML学习摘要一
- GLSL语言摘要(一)
- STL模板(摘要)一
- PMBOK学习摘要一
- 学习HTML摘要一
- hive(一)--hql摘要
- hive(一) hql摘要
- Linux socket 摘要(一)
- Shell 编写摘要 (一)
- Spring配置报错:通配符的匹配很全面,但无法找到元素‘util:list’的声明
- YARN框架解析
- java基础—JVM的垃圾算法有哪几种?CMS垃圾回收的基本流程?
- 深入理解Java中的final关键字
- 阿里的fastJSON的用法
- Haxe手册摘要 一. 类型
- 技术应该怎么学习
- 医院客户关系系统
- 单例模式
- shiro之web配置
- 详述支付路由的设计方案
- 版本控制之道之SVN使用教程(常用命令)
- php Interpreter is not configured
- 临床路径管理