**抽象类型**(第2.8节):
一个抽象类型是一个编译时构造,在运行时以一个不同的方式表示。这允许给存在的类型一个全新的意义。
> Abstract types (2.8):
> An abstract type is a compile-time construct which is represented in a different way at runtime. This allows giving a whole new meaning to existing types.
**外部类**(第6.2节):
外部类可以被用于以一个类型安全的方式描述目标语言特定的交互。
> Extern classes (6.2):
> Externs can be used to describe target-specific interaction in a type-safe manner.
**匿名结构**(第2.5节):
数据可以被简单的组织为匿名结构,减少小型数据类的必要性。
> Anonymous structures (2.5):
> Data can easily be grouped in anonymous structures, minimizing the necessity of small data classes.
~~~
var point = { x: 0, y: 10 };
point.x += 10;
~~~
**数组推导**(第6.6节):
使用 for 循环和一些逻辑快速创建和填充数组。
> Array Comprehension (6.6):
> Create and populate arrays quickly using for loops and logic.
~~~
var evenNumbers = [ for (i in 0...100) if (i\%2==0) i ];
~~~
**类,接口和继承**(第2.3节):
Haxe允许用类组织代码,使其成为一个面向对象语言。通常相关的功能如Jave等语言所支持的,包括继承和接口。
> Classes, interfaces and inheritance (2.3):
> Haxe allows structuring code in classes, making it an object-oriented language. Common related features known from languages such as Java are supported, including inheritance and interfaces.
**条件编译**(第6.1节):
条件编译允许根据编译参数编译特定的代码。这有助于抽象目标语言特定的差异,但是也可以用于其他的目的,如更详细的调试。
> Conditional compilation (6.1):
> Conditional Compilation allows compiling specific code depending on compilation parameters. This is instrumental for abstracting target-specific differences,but can also be used for other purposes, such as more detailed debugging.
~~~
\#if js
js.Browser.alert("Hello");
\#elseif sys
Sys.println("Hello");
\#end
~~~
**(广义的)代数数据类型**(第2.4节):
结构可以通过代数数据类型(ADT)描述,如Haxe语言中的枚举。除此之外,Haxe支持它们的广义的变体如GADT。
> (Generalized) Algebraic Data Types (2.4):
> Structure can be expressed through algebraic data types (ADT), which are known as enums in the Haxe Language. Furthermore, Haxe supports their generalized variant known as GADT.
~~~
enum Result {
Success(data:Array<Int>);
UserError(msg:String);
SystemError(msg:String, position:PosInfos);
}
~~~
**内联调用**(第4.4.2节):
函数可以被设计为内联,使它们的代码直接插入调用的位置。通过手动的内联不用使代码重复这可以产生显著的效能提升。
> Inlined calls (4.4.2):
> Functions can be designated as being inline, allowing their code to be inserted at call-site. This can yield significant performance benefits with out resorting to code duplication via manual inlining.
**迭代器**(第6.7节):
迭代一组值,例如一个数组的元素,在Haxe中可以很容易的迭代。定制类可以快速的实现迭代器功能来允许迭代。
> Iterators (6.7):
> Iterating over a set of values, e.g. the elements of an array, is very easy in Haxe courtesy of iterators. Custom classes can quickly implement iterator functionality to allow iteration.
~~~
for (i in [1, 2, 3]) {
trace(i);
}
~~~
**局部函数和闭包**(第5.11节):
Haxe中的函数不限于类字段,并可以被声明为表达式,允许强大的闭包。
> Local functions and closures (5.11):
> Functions in Haxe are not limited to class fields and can be declared in expressions as well, allowing powerful closures.
~~~
var buffer = "";
function append(s:String) {
buffer += s;
}
append("foo");
append("bar");
trace(buffer); // foobar
~~~
**元数据**(第6.9节):
添加元数据到字段,类或者表达式。这可以和编译器、宏,或者运行时的类沟通信息。
> Metadata (6.9):
> Add metadata to fields, classes or expressions. This can communicate information to the compiler, macros, or runtime classes.
~~~
class MyClass {
@range(1, 8) var value:Int;
}
trace(haxe.rtti.Meta.getFields(MyClass).value.range); // [1,8]
~~~
**静态扩展**(第6.3节):
存在的类和其它类型可以被额外的功能来扩展,通过使用静态扩展。
> Static Extensions (6.3):
> Existing classes and other types can be augmented with additional functionality through using static extensions.
~~~
using StringTools;
" Me & You ".trim().htmlEscape();
~~~
**字符串插值**(第6.5节):
字符串通过一个单引号声明,可以在当前的上下文访问变量。
> String Interpolation (6.5):
> Strings declared with a single quotes are able to access variables in the current context.
~~~
trace(’My name is $name and I work in ${job.industry}’);
~~~
**偏函数应用**(第6.8节):
任何函数可以应用为局部的,提供某些参数的值,然后保留其它的作为之后的字段。
> Partial function application (6.8):
> Any function can be applied partially, providing the values of some arguments and leaving the rest to be filled in later.
~~~
var map = new haxe.ds.IntMap();
var setToTwelve = map.set.bind(_, 12);
setToTwelve(1);
setToTwelve(2);
~~~
**模式匹配**(第6.4节):
复杂的结构可以被根据模式来匹配,从一个枚举或者一个结构中提取信息,并对特定的值组合定义特定的操作。
> Pattern Matching (6.4):
> Complex structures can be matched against patterns, extracting information from an enum or a structure and defining specific operations for specific value combination.
~~~
var a = { foo: 12 };
switch (a) {
case { foo: i }: trace(i);
default:
}
~~~
**属性**(第4.2节):
变量类字段可以被涉及为属性,通过定制的read和write访问,可以更精细的访问控制。
> Properties (4.2):
> Variable class fields can be designed as properties with custom read and write access, allowing fine grained access control.
~~~
public var color(get,set);
function get_color() {
return element.style.backgroundColor;
}
function set_color(c:String) {
trace(’Setting background of element to $c’);
return element.style.backgroundColor = c;
}
~~~
**访问控制**(第6.10节):
访问控制语言特性使用Haxe元数据语法来禁止或者允许访问类或者字段。
> Access control (6.10):
> The access control language feature uses the Haxe metadata syntax to force or allow access classes or fields.
**类型参数、约束和变异**(第3.2节):
类型可以通过类型参数来参数化,使类型化的容器和其它复杂的数据结构可用。类型参数也可以被约束为某些类型并遵守变异规则。
> Type Parameters, Constraints and Variance (3.2):
> Types can be parametrized with type parameters, allowing typed containers and other complex data structures. Type parameters can also be constrained to certain types and respect variance rules.
~~~
class Main<A> {
static function main() {
new Main<String>("foo");
new Main(12); // use type inference
}
function new(a:A) { }
}
~~~
- 空白目录
- 1.Haxe介绍
- 1.1.Haxe是什么
- 1.2.关于本文档
- 1.2.1.作者及贡献者
- 1.2.2.License
- 1.3Hello World
- 1.4.Haxe的历史
- 2.类型
- 2.1.基本类型
- 2.1.1.数值类型
- 2.1.2.溢出
- 2.1.3.数值运算符
- 2.1.4.Bool类型
- 2.1.5.Void类型
- 2.2.为空性
- 2.2.1.可选参数和为空性
- 2.3.类实例
- 2.3.1.类的构造函数
- 2.3.2.继承
- 2.3.3.接口
- 2.4.枚举实例
- 2.4.1.Enum构造函数
- 2.4.2.使用枚举
- 2.5.匿名结构
- 2.5.1.结构值的JSON形式
- 2.5.2. 结构类型的类记法
- 2.5.3.可选字段
- 2.5.4.性能影响
- 2.6.函数类型
- 2.6.1.可选参数
- 2.6.2.默认值
- 2.7.动态类型
- 2.7.1.Dynamic使用类型参数
- 2.7.2.实现Dynamic
- 2.8.抽象类型
- 2.8.1.隐式类型转换
- 2.8.2.运算符重载
- 2.8.3.数组访问
- 2.8.4.选择函数
- 2.8.5.枚举抽象类型
- 2.8.6.转发抽象类型字段
- 2.8.7.核心类型抽象
- 2.9.单形
- 3.类型系统
- 3.1.Typedef
- 3.1.1.扩展
- 3.2.类型参数
- 3.2.1.约束
- 3.3.泛型
- 3.3.1.泛型类型参数解释
- 3.4.变异
- 3.5.统一
- 3.5.1.类/接口 之间
- 3.5.2.结构子类型化
- 3.5.3.单形
- 3.5.4.函数返回
- 3.5.5.通用基本类型
- 3.6.类型推断
- 3.6.1.由上而下推断
- 3.6.2.局限
- 3.7.模块和路径
- 3.7.1.模块子类型
- 3.7.2.Import
- 3.7.3.解析顺序
- 4.类字段
- 4.1.变量
- 4.2.属性
- 4.2.1.常见访问标识符组合
- 4.2.2.对类型系统的影响
- 4.2.3.getter和setter的规则
- 4.3.方法
- 4.3.1.重写方法
- 4.3.2.变异和访问修饰符的影响
- 4.4.访问修饰符
- 4.4.1.可见性
- 4.4.2.Inline
- 4.4.3.Dynamic
- 4.4.4.Override
- 4.4.5.Static
- 5.表达式
- 5.1.块
- 5.2.常量
- 5.3.二元操作符
- 5.4.一元操作符
- 5.5.数组声明
- 5.6.对象声明
- 5.7.字段访问
- 5.8.数组访问
- 5.9.函数调用
- 5.10.var
- 5.11.局部函数
- 5.12.new
- 5.13.for
- 5.14.while
- 5.15.do-while
- 5.16.if
- 5.17.switch
- 5.18.try/catch
- 5.19.return
- 5.20.break
- 5.21.continue
- 5.22.throw
- 5.23.类型转换
- 5.23.1.不安全转换
- 5.23.2.安全转换
- 5.24.类型检查
- 6.语言特性
- 6.1.条件编译
- 6.2.Externs
- 6.3.静态扩展
- 6.3.1.标准库中的静态扩展
- 6.4.模式匹配
- 6.4.1.介绍
- 6.4.2.枚举匹配
- 6.4.3.变量捕获
- 6.4.4.结构匹配
- 6.4.5.数组匹配
- 6.4.6.Or 模式
- 6.4.7.守护
- 6.4.8.多个值的匹配
- 6.4.9.提取器
- 6.4.10.穷尽性检查
- 6.4.11.无效的模式检查
- 6.5.字符串插值
- 6.6.数组推导
- 6.7.迭代器
- 6.8.函数绑定
- 6.9.元数据
- 6.10.访问控制
- 6.11.内联构造函数
- 7.编译器用法
- 7.1.编译器标记
- 8.编译器功能
- 8.1.内建编译器元数据
- 8.2.无用代码消除
- 8.3.编译器服务
- 8.3.1.概述
- 8.3.2.字段访问完成
- 8.3.3.调用参数完成
- 8.3.4.类型路径完成
- 8.3.5.使用完成
- 8.3.6.位置完成
- 8.3.7.顶级完成
- 8.3.8.完成服务
- 8.4.资源
- 8.4.1.嵌入资源
- 8.4.2.检索文本资源
- 8.4.3.检索二进制资源
- 8.4.4.实现细节
- 8.5.运行时类型信息
- 8.5.1.RTTI 结构
- 8.6.静态分析仪
- 9.宏
- 9.1.宏上下文
- 9.2.参数
- 9.2.1.ExprOf
- 9.2.2.常数表达式
- 9.2.3.其它的参数
- 9.3.具体化
- 9.3.1.表达式具体化
- 9.3.2.类型具体化
- 9.3.3.类具体化
- 9.4.工具
- 9.5.类型构建
- 9.5.1.枚举构建
- 9.5.2.@:autoBuild
- 9.5.3.@:genericBuild
- 9.6.限制
- 9.6.1.Macro-in-Macro
- 9.6.2.静态扩展
- 9.6.3.构建顺序
- 9.6.4.类型参数
- 9.7.初始化宏
- 10.标准库
- 10.1.字符串
- 10.2.数据结构
- 10.2.1.数组
- 10.2.2.向量
- 10.2.3.列表
- 10.2.4.GenericStack
- 10.2.5.Map
- 10.2.6.Option
- 10.3.正则表达式
- 10.3.1.匹配
- 10.3.2.分组
- 10.3.3.替换
- 10.3.4.分割
- 10.3.5.Map
- 10.3.6.实现细节
- 10.4.Math
- 10.4.1.特殊数值
- 10.4.2.数学错误
- 10.4.3.整数数学
- 10.4.4.扩展
- 10.5.Lambda
- 10.6.模板
- 10.7.反射
- 10.8.序列化
- 10.8.1.格式化序列化
- 10.9.Xml
- 10.9.1.开始使用Xml
- 10.9.2.解析Xml
- 10.9.3.编码Xml
- 10.10.Json
- 10.10.1.解析JSON
- 10.10.2.编码JSON
- 10.10.3.实现细节
- 10.11.Input/Output
- 10.12.Sys/sys
- 10.13.远程处理
- 10.13.1.远程连接
- 10.13.2.实现细节
- 10.14.单元测试
- 11.Haxelib
- 11.1.Haxe编译器使用库
- 11.2.haxelib.json
- 11.2.1.版本控制
- 11.2.2.依赖关系
- 11.3.extraParams.hxml
- 11.4.使用Haxelib
- 12.目标平台细节
- 12.1.JavaScript
- 12.1.1.开始使用Haxe/JavaScript
- 12.1.2.使用外部JavaScript库
- 12.1.3.注入原生JavaScript
- 12.1.4.JavaScript untyped函数
- 12.1.5.调试JavaScript
- 12.1.6.JavaScript目标元数据
- 12.1.7.为JavaScript暴露Haxe类
- 12.1.8.使用 require函数加载外部类
- 12.2.Flash
- 12.2.1.开始使用Haxe/Flash
- 12.2.2.嵌入资源
- 12.2.3.使用外部Flash库
- 12.2.4.Flash目标元数据
- 12.3.Neko
- 12.4.PHP
- 12.4.1.开始使用Haxe/PHP
- 12.4.2.PHP untyped函数
- 12.5.C++
- 12.5.1.Using C++定义
- 12.5.2.Using C++ 指针
- 12.6.Java
- 12.7.C#
- 12.8.Python