hack元组介绍
元组是将可能不同类型的固定数量的值捆绑在一起的一种方法。
语法
元组类型的语法是括号括起来的逗号分隔的列表:
- 值,当创建一个元组。
- 类型,当用元组注释时。
tuple(value1, ..., value n); // for creation
(type1, ..., type n); // for annotation.
元组注释中的类型可以是类型系统中的任何类型,除了void。
以下示例显示了用元组创建和注释
<?hh
namespace Hack\UserDocumentation\Tuples\Introduction\Examples\CreateAndAnnotate;
function find_longest_and_index(array<string> $strs): (string, int) {
$longest_index = -1;
$longest_str = "";
foreach ($strs as $index => $str) {
if (strlen($str) > strlen($longest_str)) {
$longest_str = $str;
$longest_index = $index;
}
}
return tuple($longest_str, $longest_index);
}
function run(): void {
$strs = array("ABCDE", "tjkdsfjkwewowe", "Hello, this is an intro of tuples");
var_dump(find_longest_and_index($strs));
}
run();
Output
array(2) {
[0]=>
string(33) "Hello, this is an intro of tuples"
[1]=>
int(2)
}
初始化软件
元组也可以在类属性的初始化表达式中使用。
<?hh
namespace Hack\UserDocumentation\Tuples\Introduction\Examples\Initializers;
class A {
private $inst = tuple(2, "hi");
public static $stat = tuple(array(1, 2), Vector {3, 4});
}
function run(): void {
var_dump(new A());
var_dump(A::$stat);
}
run();
Output
object(Hack\UserDocumentation\Tuples\Introduction\Examples\Initializers\A)#2 (1) {
["inst":"Hack\UserDocumentation\Tuples\Introduction\Examples\Initializers\A":private]=>
array(2) {
[0]=>
int(2)
[1]=>
string(2) "hi"
}
}
array(2) {
[0]=>
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
[1]=>
object(HH\Vector)#1 (2) {
[0]=>
int(3)
[1]=>
int(4)
}
}