Hack 类型转换 - 未发出错误
Hack Type casting - No error emited
我正在学习 Hack 语言,我想创建一个像这样的特定类型:
type Points = array<array<int, int>>;
然后我定义了那个函数:
function printPoint(Points $point){
var_dump($point[0], $point[1]);
}
当我将此数组作为参数传递时:[0, 0],没有发出错误,输出为:
int(0)
int(0)
当我传递这个:[[0, 0], [0, 0]] 时,输出就像它应该的那样:
array(2) {
[0]=>
int(0)
[1]=>
int(0)
}
array(2) {
[0]=>
int(0)
[1]=>
int(0)
}
我的问题是:为什么这行得通? (我知道这不是通常的问题 x))。为什么在第一次测试时没有通知甚至致命类型错误?
谢谢 ;)
在 运行 时间,泛型是 erased。也就是说运行的时候只知道Points
是数组,不知道是什么类型的数组
相反,您想使用类型检查器 -- hh_client -- 为此。使用如下文件:
<?hh
type Points = array<array<int, int>>;
function printPoint(Points $point) {
var_dump($point[0], $point[1]);
}
function test(): void {
printPoint([0, 0]);
}
它给出了您预期的错误:
test.php:10:14,14: Invalid argument (Typing[4110])
test.php:3:21,25: This is an array (used like a hashtable)
test.php:10:15,15: It is incompatible with an int
我正在学习 Hack 语言,我想创建一个像这样的特定类型:
type Points = array<array<int, int>>;
然后我定义了那个函数:
function printPoint(Points $point){
var_dump($point[0], $point[1]);
}
当我将此数组作为参数传递时:[0, 0],没有发出错误,输出为:
int(0)
int(0)
当我传递这个:[[0, 0], [0, 0]] 时,输出就像它应该的那样:
array(2) {
[0]=>
int(0)
[1]=>
int(0)
}
array(2) {
[0]=>
int(0)
[1]=>
int(0)
}
我的问题是:为什么这行得通? (我知道这不是通常的问题 x))。为什么在第一次测试时没有通知甚至致命类型错误?
谢谢 ;)
在 运行 时间,泛型是 erased。也就是说运行的时候只知道Points
是数组,不知道是什么类型的数组
相反,您想使用类型检查器 -- hh_client -- 为此。使用如下文件:
<?hh
type Points = array<array<int, int>>;
function printPoint(Points $point) {
var_dump($point[0], $point[1]);
}
function test(): void {
printPoint([0, 0]);
}
它给出了您预期的错误:
test.php:10:14,14: Invalid argument (Typing[4110])
test.php:3:21,25: This is an array (used like a hashtable)
test.php:10:15,15: It is incompatible with an int