在无类型语言中,运行时断言可以捕获“类型错误”:
<?php
function add_one($x) {
assert(is_int($x));
return $x+1;
}
?>
使用 Hack 的类型注释,我想删除断言,但这是不安全的,因为非类型化代码仍可能调用类型化函数。
<?hh // strict
function add_one(int $x): int {
return $x+1;
}
function evil(): void {
// UNSAFE
add_one("yes"); // Runtime error!
}
?>
对于任何专业的 Hack 开发人员:您是否使用断言强制执行类型签名?(我真的很想知道 Facebook 的政策是什么,但我知道这是否是一个秘密。)