本节书摘来自华章出版社《Hack与HHVM权威指南》一书中的第1章,第1.4.2节,作者 Owen Yamauchi,更多章节内容可以访问“华章计算机”公众号查看。
1.4.2 没有标注的代码
这里有一种我在早期的列表中没有提及的类型,即没有进行类型标注的类型。举例来说,就像下面函数体内变量$x的类型。
function f($x) {
}
在代码中,你并没有书写任何类型名称在变量$x前面。那么在Hack的体系里面,它指代的类型 为“任何”。
类型检查器会对这种类型进行特殊处理,它永远不会卷入类型错误中,每个在Hack中可以存在的值都会符合这种类型“标注”,所以你可以传递任何值到上例的函数f()中,而不必担心会引发类型错误。换个角度来说,这种类型的值符合每一种可能的类型标注,所以在f()函数内,你可以拿$x做任何事情,而不会引发类型错误。
这听起来和mixed类型很相似,但是这里有个非常重要的不同点。每个可能的值都满足mixed,但是一个mixed类型的值并不满足每个可能的类型标注。举例来说,如果你传递一个mixed类型的值到一个期待int类型的函数中,你必须确保它是个整型(详见1.7.2节的内容),或者强制转化它。
“任何”类型的值在所有Hack模式中都以一样的方式工作。在严格模式下,你不能书写没有标注的代码,但是你可以调用被定义在局部或者耦合模式下没有类型标注的代码。
在“任何可以标注的都必须标注”的严格模式下,严格模式的代码可能使用这种特殊类型的值,但是绝对不允许产生它.
时间: 2024-09-25 16:56:59