首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Vec作为带有wasm-bindgen的类型化数组返回?

如何将Vec作为带有wasm-bindgen的类型化数组返回?
EN

Stack Overflow用户
提问于 2020-10-20 23:19:36
回答 1查看 3.7K关注 0票数 3

我有一个Vec,我想返回并转换成一个带有wasm的类型化数组,即将一个Vec<u32>转换成一个Uint32Array。从我的研究来看,wasm现在无法自动处理这些转换(就像对String一样),相反,您必须使用js-sys机箱。然而,我还没有找到如何使用这个板条箱的明确例子。如果能提供一个关于如何使用它的明确的简单例子,将不胜感激。

为了完整起见,如果答案能够解释如何公开返回Vec<u32>的函数,以及如何公开结构成员,即如何将这些定义转换为能够工作的内容,那就太好了:

代码语言:javascript
复制
#[wasm_bindgen]
pub fn my_func() -> Vec<u32> {
    inner_func() // returns Vec<u32>
}

#[wasm_bindgen]
pub struct my_struct {
    #[wasm_bindgen(readonly)]
    pub my_vec: Vec<u32>,
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-20 23:51:37

您可以将Vec<u32>转换为系统::Uint32Array。因此,您的my_func看起来应该是:

代码语言:javascript
复制
#[wasm_bindgen]
pub fn my_func() -> js_sys::Uint32Array {
    let rust_array = inner_func();
    return js_sys::Uint32Array::from(&rust_array[..]);
}

结构可以通过制作一个吸气器来暴露:

代码语言:javascript
复制
#[wasm_bindgen]
pub struct my_struct {
    // Note: not pub
    my_vec: Vec<u32>,
}

#[wasm_bindgen]
impl my_struct {
    #[wasm_bindgen(getter)]
    pub fn my_vec(&self) -> js_sys::Uint32Array {
        return js_sys::Uint32Array::from(&self.my_vec[..]);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64454597

复制
相关文章

相似问题

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