首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AssemblyScript是否支持函数数组?

AssemblyScript是否支持函数数组?
EN

Stack Overflow用户
提问于 2021-01-12 04:36:26
回答 2查看 227关注 0票数 0

下面是我想要转换为AssemblyScript的js代码

代码语言:javascript
复制
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编写的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-18 10:06:43

是的,这是可能的。只需要填充类型

代码语言:javascript
复制
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);

AssemblySctipt playground

票数 2
EN

Stack Overflow用户

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65674163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档