首页 > 解决方案 > 如何修复此 HH FIXME [4410]?

问题描述

试图解决 HH 的抱怨......基本上代码正在做类似的事情

Sfirstgroup = idx($largegroup, "first");

$final_thing = null

if(HH\is_any_array(Sfirstgroup) && Sfirstgroup){

   /*HH_FIXME[4110] Error revealed by is_arry refining to varray_or_darray */

   $final_thing = idx(Sfirstgroup[0],"final_thing")

}

我认为它必须与 firstgroup[0] 没有集合类型有关。但无法弄清楚如何解决这个问题......

非常感谢!

标签: hacklang

解决方案


您有两种类型错误:

  1. 使用方括号语法$firstgroup[0]的索引不适用于推断类型 from is_any_array,它推断键类型的通配符泛型(即它是 a KeyedContainer<_,_>)。如果您的所有键都是,则更$a[0]改为idx($a, 0)或使用,因为它精炼为。is_vec_or_varrayintvec<_>
  2. 你需要证明$firstgroup[0]是一个KeyedContainer使用你的第二个idx调用$final_thing。细化检查 likeis_any_array不适用于索引变量(如$firstgroup[0]),因此您必须创建一个临时变量来细化它。

总而言之,这是一种可能的解决方案:

$firstgroup = idx($largegroup, "first");

$final_thing = null;

if(HH\is_vec_or_varray($firstgroup)){
    $first_item = $firstgroup[0];
    if(HH\is_any_array($first_item)) {
        $final_thing = idx($first_item,"final_thing");
    }
}

推荐阅读