gpt4 book ai didi

hhvm - hacklang中的形状

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

我今天开始学习hacklang,但现在我对形状有些卡住了:
http://docs.hhvm.com/manual/en/hack.shapes.php

我了解形状的概念,这对我来说确实很有用,但是我不明白为什么例如以下代码不会引发任何错误:

<?hh

type Point2D = shape('x' => int, 'y' => int);

function dotProduct(Point2D $a, Point2D $b): int {
return $a['x'] * $b['x'] + $a['y'] * $b['y'];
}

function main_sse(): void {
echo dotProduct(shape('x' => 3, 'y' => 'this should cause an fatal error?'), shape('x' => 4, 'y' => 4));
}

main_sse();

“y”键定义为整数,但是当我传递字符串时,未显示任何错误。
谢谢你的帮助 :)

最佳答案

实际上执行Hack代码并不一定要对所有内容进行类型检查。您实际上需要run a separate tool to enforce the type system, as described in the docs article linked here。当您执行此操作时,会出现类似如下的错误,具体取决于您拥有的HHVM的确切版本:

File "shapes.php", line 10, characters 19-23:
Invalid argument (Typing[4110])
File "shapes.php", line 3, characters 41-43:
This is an int
File "shapes.php", line 10, characters 42-76:
It is incompatible with a string

如果您没有运行类型检查器,现代版本的HHVM也会对您大喊大叫;在我们意识到这是一个困惑的点之前,我怀疑您正在运行一个较旧的版本-抱歉!

当您运行类型不正确的代码时,实际发生的事情是未定义的行为。 Ed Cottrell的答案对于当前版本的HHVM是正确的-我们执行PHP强制类型转换的相同操作-但请记住,它是 未定义行为,在将来的版本中可能会更改,恕不另行通知。

关于hhvm - hacklang中的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25915901/

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