0

我正在尝试使用一个 Web API,它包含一个接受来自 Rust 的字符串数组的方法。

我正在使用 web_sys 与 JS API“对话”,但我找不到将静态字符串数组传入其中的方法。

不幸的是,在 Rust 中,参数的类型被错误地声明为arg: &JsValue,所以我可以将任何东西传递给它,它仍然可以编译,但会在浏览器中崩溃。

如何在 Rust 中创建一个可以用作 的字符串数组&JsValue

4

2 回答 2

1

这转换&[&str]JsValue

fn js_array(values: &[&str]) -> JsValue {
    return JsValue::from(values.into_iter()
        .map(|x| JsValue::from_str(x))
        .collect::<Array>());
}
于 2020-05-08T08:03:16.057 回答
0

使用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
}

但是你能举一个像 ["hello"].to_array() 这样的字符串文字的例子吗

对于请求的示例,您不能使用任何方法直接转换。因此,您必须使用辅助函数:

#[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
}
于 2020-05-07T14:45:53.527 回答