我有一个Vec,我想返回并转换成一个带有wasm的类型化数组,即将一个Vec<u32>转换成一个Uint32Array。从我的研究来看,wasm现在无法自动处理这些转换(就像对String一样),相反,您必须使用js-sys机箱。然而,我还没有找到如何使用这个板条箱的明确例子。如果能提供一个关于如何使用它的明确的简单例子,将不胜感激。
为了完整起见,如果答案能够解释如何公开返回Vec<u32>的函数,以及如何公开结构成员,即如何将这些定义转换为能够工作的内容,那就太好了:
#[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>,
}发布于 2020-10-20 23:51:37
您可以将Vec<u32>转换为系统::Uint32Array。因此,您的my_func看起来应该是:
#[wasm_bindgen]
pub fn my_func() -> js_sys::Uint32Array {
let rust_array = inner_func();
return js_sys::Uint32Array::from(&rust_array[..]);
}结构可以通过制作一个吸气器来暴露:
#[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[..]);
}
}https://stackoverflow.com/questions/64454597
复制相似问题