我收到错误 - 如果数组是空洞的,而 运行 合同,则元素类型必须可以为空
I am getting error - Element type must be nullable if array is holey while running the contract
{
“error”:“wasm 执行失败,出现错误:FunctionCallError(HostError(GuestPanic { panic_msg: “如果数组是空洞的,元素类型必须可以为空,文件名:\”~lib/array.ts\”行: 103 列: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_;
}
我认为由于 for 循环中的条件,此函数会在数组中产生“空洞”。您可以创建一个空的 reviews_
数组,而不是对 reviews_
和 reviews
使用相同的长度,并将元素推送到它(参见下面的示例 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 ["",""];
}
{ “error”:“wasm 执行失败,出现错误:FunctionCallError(HostError(GuestPanic { panic_msg: “如果数组是空洞的,元素类型必须可以为空,文件名:\”~lib/array.ts\”行: 103 列: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_;
}
我认为由于 for 循环中的条件,此函数会在数组中产生“空洞”。您可以创建一个空的 reviews_
数组,而不是对 reviews_
和 reviews
使用相同的长度,并将元素推送到它(参见下面的示例 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 ["",""];
}