AssemblyScript中map函数按索引访问列表元素触发编译错误求助
AssemblyScript编译zip函数报错的解决方法
问题场景
我用Node.js搭配AssemblyScript测试WebAssembly,尝试实现Python风格的zip函数,代码如下:
export function zip(list1:Array<string>, list2:Array<string>):string[][]{ return list1.map<string[]>((i:string,d:i32):string[] => [i, list2[d]]) }
执行yarn asbuild编译时会抛出无明确原因的错误。
解决方案
- 问题根源:原代码使用
list1.map遍历所有元素,若list2长度小于list1,访问list2[d]会触发数组越界,AssemblyScript编译时因内存访问违规抛出模糊错误。 - 修改后的代码:
export function zip(list1: Array<string>, list2: Array<string>): string[][] { // 取两个数组的最小长度,避免越界访问 const minLength = list1.length < list2.length ? list1.length : list2.length; const result = new Array<string[]>(minLength); for (let i = 0; i < minLength; i++) { result[i] = [list1[i], list2[i]]; } return result; }
- 额外调试建议:编译前先执行
yarn ascheck做静态代码检查,能提前发现类型不匹配、数组越界等潜在问题,比直接编译更易定位错误。
内容的提问来源于stack exchange,提问作者Reuben Jacob Mathew
相关产品推荐
相关产品推荐

