2016-02-20 2 views
0
<?hh //strict 

foreach ($list as $id) { 
    $items = new DestinationsByCountry($id); 
    $remapped = $items->byKey('destination_id')->map($stringed ==> (int) $stringed); 
    $this->ids->addAll($remapped); 
} 

foreach ($list as $id) { 
    $this->ids->addAll(
     // ******* error line below ******* 
     new DestinationsByCountry($id) 
      ->byKey('destination_id') 
      ->map($stringed ==> (int) $stringed) 
    ); 
} 

Оба нормально для typecheker, но второй причиной фатальной ошибкинеожиданный T_OBJECT_OPERATOR но без ошибок проверки типов (Hacklang)

Fatal error: syntax error, unexpected T_OBJECT_OPERATOR, expecting ')'

+1

В PHP это незаконный синтаксис, и его можно обойти с помощью '(new DestinationsByCountry ($ id)) -> byKey ...' - не уверен, что это работает в hacklang? – Kenney

+0

Спасибо, это моя вина. Это работает в хакланге. Я был просто смущен тем, что typechecker ничего не сказал об этом. –

ответ

1

Как указывалось в комментариях выше, вам нужны скобки вокруг (new DestinationsByCountry($id)), как в PHP, так и в Hack syn налог.

Причина, по которой typechecker не жалуется, заключается в том, что it doesn't typecheck code at toplevel. Если бы это было внутри функции или метода, я ожидал, что typechecker найдет ошибку. Если этот код был фактически внутри функции или метода, пожалуйста, сделайте file an issue on GitHub.

+1

Для этого уже существует проблема, хотя этот пример должен быть обновлен, чтобы обернуть код в функцию (hh_client все еще не сообщает об ошибке): https://github.com/facebook/hhvm/issues/6809 –

+0

Пример находится внутри функции класса в строгом режиме –