Vector 如何使用wasm bindgen将Vec作为类型化数组返回?

Vector 如何使用wasm bindgen将Vec作为类型化数组返回?,vector,rust,typed-arrays,wasm-bindgen,Vector,Rust,Typed Arrays,Wasm Bindgen,我有一个Vec我想用wasm bindgen返回并转换成一个类型化数组,也就是说,将Vec转换成uint32数组。根据我的研究,wasm bindgen现在似乎无法自行处理自动转换这些内容(就像它对字符串所做的那样),相反,您必须使用板条箱。然而,我还没有找到如何使用这个板条箱的明确例子。如果能提供一个关于如何使用它的简单明了的例子,我们将不胜感激 为了完整起见,如果答案能够解释如何公开返回Vec的函数以及结构成员,那就太好了,也就是说,如何将这些定义转换成可以工作的东西: #[wasm#u b

我有一个
Vec
我想用wasm bindgen返回并转换成一个类型化数组,也就是说,将
Vec
转换成
uint32数组
。根据我的研究,wasm bindgen现在似乎无法自行处理自动转换这些内容(就像它对
字符串
所做的那样),相反,您必须使用板条箱。然而,我还没有找到如何使用这个板条箱的明确例子。如果能提供一个关于如何使用它的简单明了的例子,我们将不胜感激

为了完整起见,如果答案能够解释如何公开返回
Vec
的函数以及结构成员,那就太好了,也就是说,如何将这些定义转换成可以工作的东西:

#[wasm#u bindgen]
pub fn my_func()->Vec{
inner_func()//返回向量
}
#[瓦斯穆宾根]
发布结构我的结构{
#[wasm_bindgen(只读)]
pub my_vec:vec,
}

您可以将
Vec
转换为。因此,您的
my_func
如下所示:

#[wasm#u bindgen]
pub fn my_func()->js_sys::uint32数组{
设rust_数组=inner_func();
从(&rust_数组[…])返回js_sys::uint32数组::;
}
可以通过制作getter来公开结构:

#[wasm#u bindgen]
发布结构我的结构{
//注意:不是酒吧
我的妈妈:妈妈,
}
#[瓦斯穆宾根]
执行我的结构{
#[wasm_bindgen(getter)]
发布fn my_vec(&self)->js_sys::uint32阵列{
返回js_sys::uint32数组::from(&self.my_vec[…]);
}
}

您能解释一下js sys的问题吗?它是普通的板条箱,因此您可以将其添加到板条箱的依赖项列表中,然后在板条箱的代码中使用它。@MaxV是的,我知道如何安装它,我在问如何使用它。我不理解您的问题。你可以像其他普通板条箱一样使用它。例如,您可以创建一个数组:
let array=js_sys::Uint32Array::new_,长度为(42)
然后将值放入:
array.fill(13,0,41)
并最终从函数中返回。@MaxV请再看一遍这个问题,我不知道怎么可能更清楚。我在问如何从其他地方获取一个
Vec
,并通过wasm bindgen公开它。从头开始使用
js_sys::uint32数组可能对某些人有用,但我在问如何在这个问题中转换
Vec
。@MaxV如果这个问题看起来很基本,我想是的,很抱歉,但我找了很多例子,却找不到任何有意义的东西。有一个参考问题是很好的,即使它很基本。那么是什么阻止了您创建
uint32阵列的实例呢?啊,谢谢!但是,对于长阵列,这将非常缓慢。有没有办法一次复制整件东西?@curiousdannii,请检查新版本:-)太好了这正是我所希望的。顺便说一句,切片是对值的引用,所以你不需要将某个东西“转换”成切片,而是要“创建”一个切片。您可以使用
&internal_func()[..]
创建整个向量的一个片段,它不需要存储在中间变量中,因此整个函数体可以简化为这一行:
js_sys::uint32数组::from(&internal_func()[..])
注意
返回值和分号也是不必要的。