1

{ "error": "wasm 执行失败并出现错误:FunctionCallError(HostError(GuestPanic { panic_msg: "如果数组是空洞的,则元素类型必须为空,文件名:\"~lib/array.ts\" line: 103 col: 40" }))”,“日志”:[],“block_height”:82571830,“block_hash”:“2grrzf57dPYQfnyUJZB7jw2zdqe7XsxBZBAdoSZ5wNMa”}

代码

for(let i:i32 =0 ; i < reviews.length ; i++)
{
   let condition = reviews[i].restaurant.restaurant_name==restaurantName;
   if(condition)
   {
      reviews_[i] = reviews[i].review;

   }
    
}

return reviews_;

}

4

1 回答 1

1

我认为这个函数会因为你的 for 循环中的条件而在数组中创建“洞”。您可以创建一个空数组,然后将元素推送给它,而不是使用相同的长度reviews_和(参见下面的示例)reviewsreviews_getShortList

有一个漏洞列表看起来像这样

[review1, , , , review5, review6, , review8];

您不必使用未知元素,而是必须用null-able 元素填充空白,例如空评论

[review1, emptyReview, emptyReview, emptyReview, review5, review6, emptyReview, review8];

或者只是确保列表只包含数组中没有任何“洞”的元素(“打包”数组)

[review1, review5, review6, review8];

考虑以下示例

// Will panic at runtime due to holes in the list
getListWithHoles(): string[] {
  const arr = new Array<string>(5);
  for (let i = 0; i < arr.length; ++i) {
    if (i > 2) {
      arr[i] = "";
    }
  }
  return arr; // will return [,,,"",""];
}

// Here's how we can fix it. Return a "packed" array
getShortList(): string[] {
  const arr: string[] = [];
  for (let i = 0; i < 5; ++i) {
    if (i > 2) {
      arr.push("");
    }
  }
  return arr; // will return ["",""];
}
于 2022-02-14T23:45:34.453 回答