2014-12-31 2 views
1

Хорошо, поэтому я получил приватную строку $ Vector, которая пуста при конструировании объекта, и теперь я хочу добавить строки к этому вектору. Следующий Hack код работает хорошо:Добавить элементы в nullable Вектор

<?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 

Вопрос: Как добавить элементы в векторе без этого контролер нажимает это предупреждение?

ответ

3

Самый простой способ - не использовать вектор с нулевым значением. private Vector<string> $lines = Vector {}; обойдется также в необходимости создания конструктора.

В противном случае, вам нужно проверить, если значение не равно нулю, то добавьте к нему:

public function addLine(string $line): void { 
    $vec = $this->lines; 
    if ($vec !== null) $vec[] = trim($line); 
} 

Вы не можете просто проверить, если $this->lines !== null, как это возможно для того, чтобы изменить значение между проверка и добавление (с чем-то вроде tick function), следовательно, поэтому вместо нее назначается локальная переменная.

+0

Спасибо, первые работы! – jeyemgfx

Смежные вопросы