下面是我想要转换为AssemblyScript的js代码
function make_func_array(size){
function f1(w){
w.val+=1
}
function f2(w){
w.val+=10
}
var ans=[]
for (let i=0;i<size;i++){
ans.push(f1)
ans.push(f2)
}
return ans
}
function run_ar(ar,val){
var w={val}
for(let f of ar){
f(w)
}
return w.val
}
var ar=make_func_array(10)
var ans=run_ar(ar,3)
console.log('ans',ans)它使用一组函数来执行一些基本的计算
我的问题是: AssemblyScript支持函数数组吗?它是如何用AssemblyScript编写的?
发布于 2021-01-18 10:06:43
是的,这是可能的。只需要填充类型
declare function log(i: i32): void;
class W {
val: i32;
}
function makeFnArr(size: i32): Array<(w: W) => void> {
const f1 = (w: W): void => {
w.val += 1;
}
const f2 = (w: W): void => {
w.val += 10;
}
let ans: Array<(w: W) => void> = [];
for (let i = 0; i < size; i++) {
ans.push(f1);
ans.push(f2);
}
return ans;
}
function runArr(arr: Array<(w: W) => void>, val: i32): i32 {
let w: W = { val };
for (let i = 0, len = arr.length; i < len; i++) {
let fn = arr[i];
fn(w);
}
return w.val;
}
var arr = makeFnArr(10);
var ans = runArr(arr, 3);
log(ans);发布于 2021-01-12 20:24:23
您可以通过编写例如changetype<usize>(() => true); (这里的() => true是一个返回true的简单函数)将函数转换为usize指针。然后,您可以创建一个usize数组。
来调用该函数。再次使用changetype将其转换回一个函数:changetype<() => boolean>(funcPointer)()。
下面是一个使用AssemblyScript制作的合成器的示例:https://gist.github.com/petersalomonsen/5b795090ead4f192e7f5ee5dcdd17392#file-wasmsong2-mix-ts-L337
https://stackoverflow.com/questions/65674163
复制相似问题