企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
>[warning] **定义**:可空 在 Haxe 中如果 `null` 对于一个类型是有效的值,则认为类型是可空的。 在编程语言中有一个单独、整洁的为空性定义非常常见。然而,Haxe 由于其目标语言的本身性质,需要在这个问题中找到一个妥协:因此目标语言中的一些被允许使用 `null` ;事实上,对任何东西默认都是 `null`,其它不支持 `null` 的则使用某些类型。这使两种类型目标语言的区别是必要的: >[warning] **定义**:静态目标 > 静态目标在 `null` 不是一个有效的基本类型的值时,使用它们自己的类型系统。这在 Flash,C++,Java 和 C# 目标语言中是正确的。 >[warning] **定义**:动态目标 > 动态目标的类型使用更为宽松,并允许基本类型使用 `null` 值。这应用于 JavaScript,PHP,Neko 和 Flash 6-8 目标语言中。 当在动态目标语言使用 `null` 时不需要担心;然而,静态目标中可能需要一些思考。首先,基本类型被初始化为它们的默认值。 >[warning] **定义**:默认值 静态目标语言中,基本类型的默认值如下: Int —— `0`; Float —— Flash 中为 `NaN`,其它静态目标语言中为 `0.0` ; Bool —— `false` 。 得出一个结论,Haxe 编译器不允许在静态目标语言上分配 `null` 到一个基本类型。为了实现它,基本类型必须被包装为 `Null<T>` 。 ~~~ // 静态目标平台报错 var a:Int = null; // 允许的 var b:Null<Int> = null; ~~~ 同样,基本类型不能被跟 `null` 比较,除非包装它: ~~~ var a : Int = 0; // 静态目标平台报错 if( a == null ) { ... } var b : Null<Int> = 0; if( b != null ) { ... } // 允许的 ~~~ 这个限制延伸到所有 [统一(第3.5节)](http://#) 被执行的情况。 >[warning] **类型**:Null<T> > 在静态目标语言中,可以使用 `Null<Int>`、`Null<Float>`、和 `Null<Bool>` 类型来允许 `null` 作为一个值。在动态目标语言,这没有效果。`Null<T>` 也可以被用于其它类型,以证明 `null` 是一个允许的值。 如果一个 `null` —— 值被隐藏在 `Null<T>` 或者 `Dynamic` 中 ,并被分配到一个基本类型,默认值将被使用: ~~~ var n : Null<Int> = null; var a : Int = n; trace(n); // 输出 null trace(a); // 在静态目标平台输出 0 ~~~