我今天开始学习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();
Run Code Online (Sandbox Code Playgroud)
'y'键定义为整数,但是当我传递一个字符串时,不会显示错误.谢谢你的帮助 :)
Jos*_*man 11
实际上执行Hack代码并不一定要检查所有内容.您需要实际运行单独的工具来强制执行类型系统,如此处链接的文档文章中所述.当你这样做时,你会得到一个看起来像这样的错误,具体取决于你拥有的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
Run Code Online (Sandbox Code Playgroud)
如果您没有运行类型检查器,现代版本的HHVM也会对您大喊大叫; 在我们意识到这是一个混乱之前,我怀疑你正在运行一个旧版本 - 对不起!
运行类型不正确的代码时实际发生的是未定义的行为.Ed Cottrell的答案对于当前版本的HHVM是正确的 - 我们做同样的事情来强制类型 - 但请记住它是未定义的行为,并且可能在未来的版本中发生变化,恕不另行通知.
| 归档时间: |
|
| 查看次数: |
2852 次 |
| 最近记录: |