好吧,所以我得到了一个私人的?Vector $lines在构造对象时为空,现在我想向该 Vector 添加字符串。以下 Hack 代码运行良好:
<?hh
class LineList {
private ?Vector<string> $lines;
public function addLine(string $line): void {
$this->file[] = trim($line);
}
}
但是当用hh_client检查代码时,它会给我以下警告:
$this->file[]]: a nullable type does not allow array append (Typing[4006])
[private ?Vector<string> $lines]: You might want to check this out
问题:如何在不检查器推送此警告的情况下将元素添加到 Vector?
最简单的方法是不使用可为空的 Vector。 private Vector<string> $lines = Vector {};
也解决了对构造函数的需求。
否则,您需要检查该值是否不为 null,然后附加到它:
public function addLine(string $line): void {
$vec = $this->lines;
if ($vec !== null) $vec[] = trim($line);
}
你不能只检查是否$this->lines !== null
因为它有可能在检查和追加之间改变值(使用类似于tick函数的东西),因此为什么它被分配给局部变量。