2014-04-13 60 views
2

此代碼爲什麼工作?駭客語言:收集類型的泛型

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

test(Vector {1, array("I'm an array"), 3}); 

它不應該拋出一個錯誤?什麼是<int>應該是爲了什麼?

回答

7

這不會在HHVM中引發錯誤,但會在Hack工具中引發錯誤。這是由於HHVM目前忽略了泛型,因此它只是檢查$v是否爲Vector

運行黑客工具(hh_client)將首先抱怨的頂層語句,如果你糾正通過包裝函數內部調用test,將正確抱怨試圖通過一個Vector<mixed>Vector<int>

+2

有關如何獲取'hh_client'設置的相關文檔位於:http://docs.hhvm.com/manual/en/install.hack.bootstrapping.php 作爲附加顏色,請注意類型擦除語義泛型不是事物一定會永遠工作的方式;這是我們可能允許運行時知道將來某個時間的事情。 –