【发布时间】:2018-02-20 19:40:47
【问题描述】:
我发现生锈了,一生都很难过。
例如,我正在尝试一些 GUI:
#[macro_use]extern crate native_windows_gui as nwg;
use nwg::{Ui, Event, EventArgs};
nwg_template!(
head: setup_ui<&'static str>,
controls: [
("MainWindow", nwg_window!(title="Test1"; size=(180,50))),
("SetButton", nwg_button!(parent="MainWindow"; visible=false)),
("BackButton", nwg_button!(parent="MainWindow"; text="<"; position=(10,10); size=(30,30))),
("Text", nwg_textbox!(parent="MainWindow"; readonly=true; position=(40,10); size=(100,30))),
("NextButton", nwg_button!(parent="MainWindow"; text=">"; position=(140,10); size=(30,30)))
];
events: [
("SetButton", "Set", Event::Click, |app,_,_,_| {
let display = nwg_get_mut!(app; ("Text", nwg::TextBox));
let index = nwg_get!(app; ("Index", &str));
display.set_text(**index);
}),
("BackButton", "Back", Event::Click, |_,_,_,_| {}),
("NextButton", "Next", Event::Click, |_,_,_,_| {})
];
resources: [];
values: [
("Index", "Test")
]
);
fn create_ui(data: &'static str) -> Result<Ui<&'static str>, nwg::Error> {
let app: Ui<&'static str>;
match Ui::new() {
Ok(ui) => { app = ui; },
Err(e) => { return Err(e) }
}
if let Err(e) = setup_ui(&app) {
return Err(e);
}
app.pack_value(&"Data", &data);
app.trigger(&"SetButton", Event::Click, EventArgs::None);
if let Err(e) =app.commit() {
Err(e)
} else {
Ok(app)
}
}
fn main() {
let data = "Foo";
let _ui = create_ui(data).expect("Oups");
nwg::dispatch_events();
}
我不明白为什么在函数create_ui 中,data 的寿命不够长,无法在app.pack_value() 中被喂食。
在我看来,'static 的生命周期可以让它存活足够长的时间。
但是编译器认为它在create_ui 的末尾死亡,因此不能用作app.pack_value("Data", &data);
我做错了什么?
【问题讨论】:
-
"..它在 create_ui..结束时死掉了。"
-
“我做错了什么?”您在没有提供错误消息文本的情况下抱怨错误。如果没有所有信息,我们将无法提供帮助