Hack语言:集合类型的泛型

Ceq*_*iel 2 generics hhvm hacklang

为什么这段代码有效?

<?hh // strict
function test(Vector<int> $v):void {
    print_r($v);
}

test(Vector {1, array("I'm an array"), 3});
Run Code Online (Sandbox Code Playgroud)

它不应该抛出错误吗?什么是<int>应该的?

小智 7

这不会在HHVM中引发错误,但会在Hack工具中引发错误.这是因为HHVM目前忽略了泛型,所以它只是检查是否$vVector.

运行Hack工具(hh_client)将首先抱怨顶级语句,如果通过将调用包装到test函数内部来纠正它,将正确地抱怨尝试传递a Vector<mixed>作为Vector<int>.

  • 有关如何设置`hh_client`的相关文档如下:http://docs.hhvm.com/manual/en/install.hack.bootstrapping.php作为附加颜色,请注意泛型的类型擦除语义不是事情必将永远发挥作用; 这是我们可以允许运行时在将来的某个时间获得知识的东西. (2认同)