gpt4 book ai didi

syntax - Hack语言中的顶级类型是什么?

转载 作者:行者123 更新时间:2023-12-02 04:35:16 24 4
gpt4 key购买 nike

the Hack language类型系统,是否有“顶级”类型,也称为“任何”类型,或通用“对象”类型?也就是说,所有类型都是其子类的类型?

The manual mentions "mixed" types ,这可能相似,但没有真正解释。还可以在某些地方简单地省略类型声明。然而,这不能在任何地方都完成,例如如果我想将某个东西声明为从 string 到顶级类型的函数,则不清楚如何执行此操作。 函数(字符串):混合

最佳答案

我是一名在 Facebook 从事 Hack 工作的工程师。这是一个非常有洞察力和有趣的问题。根据您具体要了解的内容,Hack 有几种不同的变体。

首先,我们来谈谈混合。它是一切的父类(super class)型。例如,此类型检查:

<?hh // strict
function f(): mixed {
return 42;
}

但是由于它是所有内容的父类(super class)型,因此在通过 is_int 对它的实际含义进行案例分析之前,您无法对mixed 值做太多事情>instanceof 等。下面是如何使用 f() 结果的示例:

<?hh // strict
function g(): int {
$x = f();
if (is_int($x)) {
return $x;
} else {
return 0;
}
}

“缺少注释”类型(“any”)与此有些不同。 mixed 是所有事物的父类(super class)型,而“any”统一所有事物——它既是所有事物的父类(super class)型子类型。这意味着,如果您省略注释,我们会假设您知道自己在做什么,然后就让它过去。例如,以下代码类型检查如下:

<?hh
// No "strict" since we are omitting annotations
function f2() {
return 42;
}
function g2(): string {
return f2();
}

这显然不合理——我们只是破坏了类型系统,如果我们执行上面的代码,将会导致运行时类型错误——但为了简化转换,它在部分模式下被承认。严格要求您对所有内容进行注释,因此如果您的所有代码都是严格的,则无法以这种方式获取“any”类型的值来破坏类型系统。考虑一下如何在严格模式下注释上面的代码:要么 f2 必须返回 int 这将是一个直接的类型错误(“string is与 int 不兼容”),或者 f2 必须返回 mixed ,这将是一个类型错误(“字符串与 mix 不兼容”),直到您这样做正如我在前面的示例中所做的那样,使用 is_int 等进行案例分析。

希望这能澄清问题——如果您需要澄清,请在评论中告诉我,我会进行编辑。如果您还有其他问题没有严格说明这一点,请继续将它们标记为“hacklang”,我们将确保它们得到答复!

最后:如果您不介意,您可以在令人困惑或不清楚的文档页面上按“提交文档错误”,或者可以以任何方式进行改进吗?我们理想地希望 docs.hhvm.com 成为此类内容的一站式场所,但文档中肯定存在漏洞,我们希望像您这样聪明、热情的人能够帮助指出。 (也就是说,我认为这些内容在文档中得到了很好的解释,但由于您感到困惑,显然情况并非如此,我们非常感谢详细说明您迷路的错误报告。)

关于syntax - Hack语言中的顶级类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23049582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com