codecamp

Haxe可空性详解:Null<T>的使用与默认值

Haxe 的可空性

在 Haxe 中,如果 null 是某个类型的合法值,则该类型被认为是可空的

静态目标与动态目标

Haxe 的目标语言对 null 的处理方式不同,因此需要区分两种类型的目标语言:

定义:静态目标



静态目标使用自己的类型系统,其中基本类型不允许 null 值。这包括 Flash、C++、Java 和 C# 目标。

定义:动态目标



动态目标对类型更为宽松,允许基本类型具有 null 值。这适用于 JavaScript、PHP、Neko 和 Flash 6-8 目标。

在动态目标上使用 null 时无需担心,但在静态目标上可能需要特别注意。基本类型在静态目标上会初始化为默认值。

定义:默认值



在静态目标上,基本类型的默认值如下:

- Int0
- Float:在 Flash 上为 NaN,在其他静态目标上为 0.0
- Boolfalse

可空类型

在静态目标上,不能将 null 赋值给基本类型。为了允许 null,需要将基本类型包装为 Null<T>

// 在静态平台上会报错
var a:Int = null;


// 允许
var b:Null<Int> = null;

同样,基本类型不能与 null 进行比较,除非它们被包装为 Null<T>

var a:Int = 0;
// 在静态平台上会报错
if (a == null) { ... }


var b:Null<Int> = 0;
if (b != null) { ... } // 允许

这种限制适用于所有执行类型统一的情况。

定义: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(a); // 在静态平台上输出 0

总结

在 Haxe 中,null 的使用取决于目标平台。在动态目标上,基本类型可以是 null;但在静态目标上,需要使用 Null<T> 来允许 null 值。了解默认值的概念也很重要,尤其是在处理静态目标时。

如果你对 Haxe 的可空性感兴趣,可以通过编写简单的代码来练习如何在不同平台上处理 null 值!

Haxe Void类型详解:函数参数和返回值的应用
Haxe可选参数和可空性:理解参数的使用规则
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }