在 JavaScript 中,我可以这样做:
JSON.stringify([1,2,3]) === JSON.stringify([1,2,3]) // true
在编译为 Wasm 的 Rust 中,我尝试了类似的方法:
#[wasm_bindgen_test]
fn test_algo() {
let js_array_to_sort = Array::of3(&JsValue::from(1), &JsValue::from(3), &JsValue::from(2));
let js_array_after_sort = Array::of3(&JsValue::from(1), &JsValue::from(2), &JsValue::from(3));
let array = JsValue::from(&js_array_to_sort);
assert_eq!(
JSON::stringify(BubbleSort::sort(SortArray::new(array))).unwrap(),
JSON::stringify(JsValue::from(&js_array_after_sort)).unwrap(),
);
}
它引发了一些wasm-pack test --chrome
关于 no partialeq
forJsString
的错误 - 结果是JSON::stringify
:
error[E0277]: can't compare `js_sys::JsString` with `js_sys::JsString`
--> src/algorithms/bubble.rs:36:5
|
36 | / assert_eq!(
37 | | JSON::stringify(&BubbleSort::sort(SortArray::new(array))).unwrap(),
38 | | JSON::stringify(&JsValue::from(&js_array_after_sort)).unwrap(),
39 | | );
| |______^ no implementation for `js_sys::JsString == js_sys::JsString`
|
= help: the trait `std::cmp::PartialEq` is not implemented for `js_sys::JsString`
如果我尝试转换为字符串并以其他方式进行比较(例如直接使用JsString
方法),我总是会遇到相同的编译错误。
如果我尝试直接比较这个数组,我在 JavaScript 中有类似的行为:
JsValue([1,2,3]) == JsValue([1,2,3]) // false
在Cargo.toml
我有:
[dependencies]
wasm-bindgen = "0.2.39"
js-sys = "0.3.16"
wasm-bindgen-test = "0.2.39"
我该如何进行这种比较?
编辑。
我想出了这样的东西来通过这个测试:
assert_eq!(
String::from(JSON::stringify(&BubbleSort::sort(SortArray::new(array))).unwrap()),
String::from(JSON::stringify(&JsValue::from(&js_array_after_sort)).unwrap()),
);