
集合
|
107
$vector = Vector {'one', 'two'};
list
($one, $two) = $vector;
$map = Map {1 => 'one', 0 => 'zero'};
list
($zero, $one) = $map;
// $zero
是
'zero'
且
$one
是
'one'
不可变集合
Vector
、
Map
以及
Set
都分别有其不可变的等价版本:
ImmVector
、
ImmMap
和
ImmSet
。(
Pair
本身就是不可变的,它没有可变的情况。)它们不实现任何可以修改它们内容的方法,
并且它们也不能通过方括号语法或者
unset
进行修改。如果你试图这样做,将会抛出一
个“非法操作异常(
InvalidOperationException
)”。不可变集合的内容在它们被创
建的时候就固定下来。它们可以通过字面量语法进行创建,仅使用
ImmVector
、
ImmMap
或者
ImmSet
作为类名,或者通过它们的构造器,或者从另外的
collection
进行转换(参
见
5.4.4
节的相关内容)。
通常来说,如果可能的话你应该尽量使用不可变集合。如果一些数据不应被修改,那么
使用不可变集合就可以减少一个可能的
bug
来源。在类型系统中,它还会对程序行为编
码更多的信息,这总是一件好事情。
5.4
集合类型标注
大多数时间下,你不应该在类型标注中直接使用集合类名称本身。
Hack
提供了一系列接
口用于描述集合功能的元素,所以你应该在日常类型标注的时候使用这些接口。
例如,如果你正在编写一个函数, ...