- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现一种方法来发送 u32
的数组(如果可能,最终是 usize
的数组),因为您不能只在 wasm_bindgen
上声明公共(public)数组字段类型。但是,使用 wasm_bindgen
中概述的示例PR 1749 ,我似乎无法将数组或切片转换为 js_sys::Array
;它仅适用于 Vec
s。我的问题是,为什么?见下文
pub fn test() -> js_sys::Array {
let arr: [u32; 5] = [0,1,2,3,4];
let slice = &arr[0..2];
let vec: Vec<u32> = vec![0,1,2];
arr.into_iter().map(JsValue::from).collect() // This doesn't work
slice.into_iter().map(JsValue::from).collect() // Also doesn't work
vec.into_iter().map(JsValue::from).collect() // Works as expected!
}
具体错误为:
the trait 'wasm_bindgen::cast::JsCast' is not implemented for 'u32'
数组和切片示例似乎不适用于任何数字类型、整数或浮点数。我唯一的想法是因为 PR 1749 中的实现似乎需要一个 ref,并且数组分配在
FromIterator
的堆栈上。对数组中的项目无效?
wasm_bindgen
越过边界到 JS),或者如果没有,为什么?我很想知道。
最佳答案
尽管 Rust 数组和切片有 into_iter
方法返回相同的 Iterator
作为 iter
方法 do 迭代对值的引用而不是值本身。是的,这令人困惑。由于JsValue::from
为 u32
实现但不适用于 &u32
你可以把你的Iterator<Item = &u32>
并将其转换为 Iterator<Item = u32>
使用 copied
方法。固定工作示例:
use wasm_bindgen::JsValue;
use js_sys::Array;
fn array_to_js_array(array: [u32; 5]) -> Array {
array.iter().copied().map(JsValue::from).collect()
}
fn slice_to_js_array(slice: &[u32]) -> Array {
slice.iter().copied().map(JsValue::from).collect()
}
fn vec_to_js_array(vec: Vec<u32>) -> Array {
vec.into_iter().map(JsValue::from).collect()
}
关于arrays - 无法将迭代器转换为 js_sys::Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65429723/
如何转换本地 closure进入 js_sys::Funtion ? 我想做这样的事情: let canvas = document.get_element_by_id("canvas").unwra
我正在尝试实现一种方法来发送 u32 的数组(如果可能,最终是 usize 的数组),因为您不能只在 wasm_bindgen 上声明公共(public)数组字段类型。但是,使用 wasm_bindg
我在玩 wasm-bindgen ( https://github.com/rustwasm/wasm-bindgen ),只是出于好奇。 一边玩Navigator ( web_sys crate)
我是一名优秀的程序员,十分优秀!