【发布时间】:2020-10-12 15:54:10
【问题描述】:
阅读 Rust 书后,我决定尝试使用 Web Assembly。我正在创建一个简单的跟踪器脚本来练习和了解更多信息。有几个方法需要访问窗口、导航器或 cookie API。每次我必须访问其中任何一个时,都会涉及很多样板代码:
pub fn start() {
let window = web_sys::window().unwrap();
let document = window.document().unwrap();
let html = document.dyn_into::<web_sys::HtmlDocument>().unwrap();
let cookie = html_document.cookie().unwrap();
}
这是不切实际的,让我很困扰。有没有聪明的方法来解决这个问题?事实上,我已经尝试使用lazy_static 将所有这些都放在global.rs 文件中:
#[macro_use]
extern crate lazy_static;
use web_sys::*;
lazy_static! {
static ref WINDOW: window = {
web_sys::window().unwrap()
};
}
但编译失败:*mut u8 不能在线程之间安全共享。
【问题讨论】:
-
什么都没有?真的吗?
-
只使用函数?
fn html() -> HtmlDocument {let window = web_sys::window().unwrap(); let document = window.document().unwrap(); document.dyn_into::<web_sys::HtmlDocument>().unwrap()} -
一点补充:在任何地方都使用 unwrap 可能是一种不好的做法。尝试处理错误,或者至少使用 .expect(),这样您就可以提供有意义的错误消息,而不是
tried calling unwrap on...
标签: rust global-variables webassembly