我正在尝试使用一个Web API,该API包含一个接受来自Rust的字符串数组的方法。
我正在使用web_sys与JS进行“对话”,但我找不到一种方法来将静态字符串数组传递给它。
不幸的是,在Rust中,参数的类型被错误地声明为arg: &JsValue,所以我可以向它传递几乎任何东西,它仍然可以编译,但在浏览器中崩溃。
如何在Rust中创建可用作&JsValue的字符串数组
发布于 2020-05-08 16:03:16
这会将&[&str]转换为JsValue
fn js_array(values: &[&str]) -> JsValue {
return JsValue::from(values.into_iter()
.map(|x| JsValue::from_str(x))
.collect::<Array>());
}发布于 2020-05-07 22:45:54
通过使用js_sys,您可以创建如下数组:
use js_sys::Array;
#[wasm_bindgen]
pub fn strings() -> Array {
let arr = Array::new_with_length(10);
for i in 0..arr.length() {
let s = JsValue::from_str(&format!("str {}", i));
arr.set(i, s);
}
arr
}但是你能给出一个像“
”.to_array()这样的字符串的例子吗?
对于请求的示例,您不能使用任何方法直接转换。因此,您必须使用helper函数:
#[wasm_bindgen]
pub fn strings() -> Array {
to_array(&["str 1", "str 2"])
}
pub fn to_array(strings: &[&str] ) -> Array {
let arr = Array::new_with_length(strings.len() as u32);
for (i, s) in strings.iter().enumerate() {
arr.set(i as u32, JsValue::from_str(s));
}
arr
}https://stackoverflow.com/questions/61660276
复制相似问题