Haxe手册摘要 一. 类型
类型
不需要像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手册摘要 一. 类型相关推荐
- oa系统服务器日志,OA系统使用手册摘要.doc
OA系统使用手册摘要.doc PAGE PAGE 35 云协同办公系统用户使用手册 系统功能介绍登陆系统安装好系统后,输入服务器ip或者名称,即可登陆系统,如: HYPERLINK "&qu ...
- 改良版的大学生厚黑学手册摘要
现在中国提倡八荣八耻的价值观,而有不少大学生研究<厚黑学>,拿书中的厚黑之术来武装自己.作为一名大学生,我深感这些朋友是迷失了方向,在昨天的<财经夜读>故事里,听到了. ...
- 阿里巴巴Java开发手册摘要(一)
一命名风格 1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结尾. 反例:_name / $name / name_ / name$ 2.类名使用UpperCamelCase风格 ...
- js手册之基本类型及判断方法
js数据类型 基本数据类型 Number string boolean null undefined bigint symbol 引用类型 object function (Function.prot ...
- 类型列表Python 学习手册 第二部分 类型与运算 第4章 介绍Python对象类型
这几周一直在查找类型列表之类的问题,上午正好有机会和大家讨论一下. 第二分部 类型与算运 第四章 绍介Python象对类型 形成: 象对 --> 表达式 --> 语句 --> ...
- mysql year_mysql8 参考手册--year年份类型
YEAR类型是1字节类型,用于表示年份值.可以声明为 YEAR隐式显示宽度为4个字符,或者等效为YEAR(4)显式显示宽度. 注意从MySQL 8.0.19开始,不建议YEAR(4) 使用具有显式显示 ...
- GCC 中文手册 - 摘自纯C论坛
GCC Section: GNU Tools (1) Updated: 2003/12/05 Index Return to Main Contents NAME gcc,g++-GNU工程的C和C+ ...
- javascript入门_JavaScript入门手册(2020版)
javascript入门 JavaScript is one of the most popular programming languages in the world. JavaScript是世界 ...
- ds5100更换电池 ibm_IBM DS 中低端存储部件更换手册(v 150227)
作者 王巧雷 审核 分类 IBM 子类 DS存储 更新时间 2015-02-27 关键字 IBM DS中低端存储部件更换手册 摘要 IBM DS中低端存储部件更换手册 主要适用环境 IBM 版本说明 ...
最新文章
- oracle使用小技巧
- 最前沿的科学, 寻找最聪明的你—“宏基因组”公众号编辑招募
- jdb java_JDB - 介绍
- CentOS 7 安装Boost 1.61
- Eating Soup
- Java / JEE中的有效日志记录–映射的诊断上下文
- C#穿透session隔离———Windows服务启动UI交互程序
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
- 二分的思想在算法中体现
- 基本的阿里云Linux服务器设置
- [bzoj4826][Hnoi2017]影魔
- 学习自己动手设计数据库
- kux格式怎么转换成mp3_优酷mac版怎么转码,如何将kux格式转成mp4格式
- 金融科技在互联网金融行业性风险防范领域的应用
- Tableau安装详解及密钥申请
- 卷积神经网络学习路线(十一)| Stochastic Depth(随机深度网络)
- 数据结构--创建并输出二叉树的c语言实现(超详细注释/实验报告)
- php编写的旅游网站
- 数据结构C语言——广义表
- 数据告诉你,全世界到底有多少人在炒币
热门文章
- The web application [] appears to have started a thread named [Thread-
- [企业管理]员工生育保障问题的讨论
- QA350迟来的报告,中毒已深,pk自己的全部家当-----愿大家为我排忧
- docker启动mysql
- 开源语义理解框架 Clause API 文档:快速实现聊天机器人
- 【无标题】OCR手写数据集
- 跳台阶基础版、改进版(不能连续跳2阶)
- 基于PT8.2的草地洒水器控制实验
- leetcode_205. 同构字符串
- 区块链 Fisco bcos 智能合约(19)-区块链性能腾飞:基于DAG的并行交易执行引擎PTE