类型

不需要像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) {//constructorthis.x = x;this.y = y;}public function toString() {//normal methodreturn "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 constructorthis.z = z;}
}

注意:子类可以不定义构造函数,但如果定义了就必须调super(),而且不像其他语言(如java)super可以在构造函数的任意位置而不是第一行调用。

子类可以覆盖父类的函数, 但需要override关键字。

接口

使用关键字interface来定义,例:

interface Printable {public function toString():String;
}

使用implements关键字来表示实现:

class Point implements Printable { }

支持多重实现,但要多个implements 关键字:

class Point implements Printableimplements 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; // validvar 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手册摘要 一. 类型相关推荐

  1. oa系统服务器日志,OA系统使用手册摘要.doc

    OA系统使用手册摘要.doc PAGE PAGE 35 云协同办公系统用户使用手册 系统功能介绍登陆系统安装好系统后,输入服务器ip或者名称,即可登陆系统,如: HYPERLINK "&qu ...

  2. 改良版的大学生厚黑学手册摘要

        现在中国提倡八荣八耻的价值观,而有不少大学生研究<厚黑学>,拿书中的厚黑之术来武装自己.作为一名大学生,我深感这些朋友是迷失了方向,在昨天的<财经夜读>故事里,听到了. ...

  3. 阿里巴巴Java开发手册摘要(一)

    一命名风格 1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结尾. 反例:_name / $name / name_ / name$ 2.类名使用UpperCamelCase风格 ...

  4. js手册之基本类型及判断方法

    js数据类型 基本数据类型 Number string boolean null undefined bigint symbol 引用类型 object function (Function.prot ...

  5. 类型列表Python 学习手册 第二部分 类型与运算 第4章 介绍Python对象类型

    这几周一直在查找类型列表之类的问题,上午正好有机会和大家讨论一下. 第二分部 类型与算运   第四章 绍介Python象对类型   形成: 象对 --> 表达式 --> 语句 --> ...

  6. mysql year_mysql8 参考手册--year年份类型

    YEAR类型是1字节类型,用于表示年份值.可以声明为 YEAR隐式显示宽度为4个字符,或者等效为YEAR(4)显式显示宽度. 注意从MySQL 8.0.19开始,不建议YEAR(4) 使用具有显式显示 ...

  7. GCC 中文手册 - 摘自纯C论坛

    GCC Section: GNU Tools (1) Updated: 2003/12/05 Index Return to Main Contents NAME gcc,g++-GNU工程的C和C+ ...

  8. javascript入门_JavaScript入门手册(2020版)

    javascript入门 JavaScript is one of the most popular programming languages in the world. JavaScript是世界 ...

  9. ds5100更换电池 ibm_IBM DS   中低端存储部件更换手册(v 150227)

    作者 王巧雷 审核 分类 IBM 子类 DS存储 更新时间 2015-02-27 关键字 IBM DS中低端存储部件更换手册 摘要 IBM DS中低端存储部件更换手册 主要适用环境 IBM 版本说明 ...

最新文章

  1. oracle使用小技巧
  2. 最前沿的科学, 寻找最聪明的你—“宏基因组”公众号编辑招募
  3. jdb java_JDB - 介绍
  4. CentOS 7 安装Boost 1.61
  5. Eating Soup
  6. Java / JEE中的有效日志记录–映射的诊断上下文
  7. C#穿透session隔离———Windows服务启动UI交互程序
  8. SpringBoot整合阿里云OSS文件上传、下载、查看、删除
  9. 二分的思想在算法中体现
  10. 基本的阿里云Linux服务器设置
  11. [bzoj4826][Hnoi2017]影魔
  12. 学习自己动手设计数据库
  13. kux格式怎么转换成mp3_优酷mac版怎么转码,如何将kux格式转成mp4格式
  14. 金融科技在互联网金融行业性风险防范领域的应用
  15. Tableau安装详解及密钥申请
  16. 卷积神经网络学习路线(十一)| Stochastic Depth(随机深度网络)
  17. 数据结构--创建并输出二叉树的c语言实现(超详细注释/实验报告)
  18. php编写的旅游网站
  19. 数据结构C语言——广义表
  20. 数据告诉你,全世界到底有多少人在炒币

热门文章

  1. The web application [] appears to have started a thread named [Thread-
  2. [企业管理]员工生育保障问题的讨论
  3. QA350迟来的报告,中毒已深,pk自己的全部家当-----愿大家为我排忧
  4. docker启动mysql
  5. 开源语义理解框架 Clause API 文档:快速实现聊天机器人
  6. 【无标题】OCR手写数据集
  7. 跳台阶基础版、改进版(不能连续跳2阶)
  8. 基于PT8.2的草地洒水器控制实验
  9. leetcode_205. 同构字符串
  10. 区块链 Fisco bcos 智能合约(19)-区块链性能腾飞:基于DAG的并行交易执行引擎PTE