W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
hack提供額外的“陣列狀”的類型:dict,vec,和keyset; 我們預(yù)計(jì)這些將最終替換收集對(duì)象,并且將被建議,一旦Hack標(biāo)準(zhǔn)庫(kù)離開'預(yù)覽'狀態(tài),它們將被使用 。
所有這些類型都保留插入順序。
文字用[]語(yǔ)法創(chuàng)建:
<?hh
namespace Hack\UserDocumentation\Collections\HackArrays\Examples\Literals;
function main(): void {
var_dump(vec[1, 2, 3, 1]);
var_dump(dict['a' => ord('a'), 'b' => ord('b'), 'c' => ord('c')]);
var_dump(keyset[1, 2, 3, 1]);
}
main();
Output
vec(4) {
int(1)
int(2)
int(3)
int(1)
}
dict(3) {
["a"]=>
int(97)
["b"]=>
int(98)
["c"]=>
int(99)
}
keyset(3) {
int(1)
int(2)
int(3)
}
此外,Hack還提供以下轉(zhuǎn)換功能:
<?hh
namespace Hack\UserDocumentation\Collections\HackArrays\Examples\Conversions;
function main(): void {
var_dump(vec(Vector { 1, 2, 3, 1 }));
var_dump(dict(Map {'a' => ord('a'), 'b' => ord('b'), 'c' => ord('c') }));
var_dump(keyset(Vector {1, 2, 3, 1 }));
var_dump(keyset(Set {1, 2, 3, 1 }));
}
main();
Output
vec(4) {
int(1)
int(2)
int(3)
int(1)
}
dict(3) {
["a"]=>
int(97)
["b"]=>
int(98)
["c"]=>
int(99)
}
keyset(3) {
int(1)
int(2)
int(3)
}
keyset(3) {
int(1)
int(2)
int(3)
}
由于Hack Arrays不是對(duì)象,它們沒(méi)有方法。Library支持通過(guò)Hack標(biāo)準(zhǔn)庫(kù)提供。
完整的API參考是自動(dòng)生成的,但我們強(qiáng)烈建議您先閱讀 README。
hack集合(Vector,Map,Set,...)都是對(duì)象; hack陣列(vec,dict,keyset)是值。主要影響是:
引用和寫時(shí)復(fù)制語(yǔ)義之間的區(qū)別如下所示:
<?hh
namespace Hack\UserDocumentation\Collections\HackArrays\Examples\RefVsCow;
function do_stuff($container) {
$container[] = 456;
return $container;
}
function main(): void {
$a = Vector { 123 };
$b = do_stuff($a);
$x = vec[123];
$y = do_stuff($x);
var_dump([
array(
'in' => $a,
'out' => $b,
'mutated' => $a == $b,
),
array(
'in' => $x,
'out' => $y,
'mutated' => $x == $y,
),
]);
}
main();
Output
array(2) {
[0]=>
array(3) {
["in"]=>
object(HH\Vector)#1 (2) {
[0]=>
int(123)
[1]=>
int(456)
}
["out"]=>
object(HH\Vector)#1 (2) {
[0]=>
int(123)
[1]=>
int(456)
}
["mutated"]=>
bool(true)
}
[1]=>
array(3) {
["in"]=>
vec(1) {
int(123)
}
["out"]=>
vec(2) {
int(123)
int(456)
}
["mutated"]=>
bool(false)
}
}
當(dāng)未定義的索引被訪問(wèn)時(shí),hack數(shù)組會(huì)顯示異常,而不是返回null。
禁止引用的證明如下:
<?hh
namespace Hack\UserDocumentation\Collections\HackArrays\Examples\CanNotContainReferences;
function foo(int &$foo) {
$foo = 346;
}
$y = vec[1,2,3];
foo($y[2]);
var_dump($y);
Output
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Vecs cannot contain references' in /Users/fredemmott/code/user-documentation/guides/hack/23-collections/11-hack-arrays-examples/can-not-contain-references.php:10
Stack trace:
#0 {main}
Examples
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: