正在尝试修复HH投诉。。。基本上,代码正在做类似于这个的事情
Sfirstgroup = idx($largegroup, "first");
$final_thing = null
if(HHis_any_array(Sfirstgroup) && Sfirstgroup){
/*HH_FIXME[4110] Error revealed by is_arry refining to varray_or_darray */
$final_thing = idx(Sfirstgroup[0],"final_thing")
}
我认为这一定与第一组[0]没有集合类型有关。但不知道如何解决这个问题。。。
非常感谢!
您有两个类型错误:
- 使用方括号语法
$firstgroup[0]
进行索引与从is_any_array
推断出的类型不太配合,后者推断出键类型的通配符泛型(即它是KeyedContainer<_,_>
(。将$a[0]
更改为idx($a, 0)
,或者如果所有密钥都是int
,则使用is_vec_or_varray
,因为它细化为vec<_>
- 您需要证明
$firstgroup[0]
是KeyedContainer
才能使用您对$final_thing
的第二个idx
调用。像is_any_array
这样的细化检查对索引变量(像$firstgroup[0]
(不起作用,所以必须创建一个临时变量来细化它
总而言之,这里有一个可能的解决方案:
$firstgroup = idx($largegroup, "first");
$final_thing = null;
if(HHis_vec_or_varray($firstgroup)){
$first_item = $firstgroup[0];
if(HHis_any_array($first_item)) {
$final_thing = idx($first_item,"final_thing");
}
}