Rust GTK +示例无法编译,因为Option&lt;&amp; str&gt;:From <option <&string>&gt;不满意

时间:2017-06-11 03:27:05

标签: rust gtk

Rust GTK examples中,有一个名为notebook的人。它没有编译:

for i in 1..4 {
    let title = format!("sheet {}", i);
    let label = gtk::Label::new(Some(&title));
    //let label = gtk::Label::new(Some("test1111")); # works well
    notebook.create_tab(&title, label.upcast());
}

错误是:

the trait bound `std::option::Option<&str>: std::convert::From<std::option::Option<&std::string::String>>` is not satisfied

它是什么以及如何解决它?

1 个答案:

答案 0 :(得分:6)

您似乎正在处理notebook.rs的旧副本。在current master中,let mut notebook = Notebook::new(); for i in 1..4 { let title = format!("sheet {}", i); let label = gtk::Label::new(&*title); notebook.create_tab(&title, label.upcast()); } 中的循环如下所示:

&*title

此代码编译 - 区别在于它使用StringOption<&str>转换为可转换为gtk-rs的内容。

PR#447中,Option<&str>在接受可选字符串的函数参数中使用Into<Option<&str>>切换为gtk::Label::new,包括"string"。这使得API更符合人体工程学,因为常量字符串参数可以写为Some("string")而不是Into<Option<...>>。但是,更改不是100%向后兼容 - Some(&string)模式不支持传递stringString为拥有&*string - 必须写{{1}或者更明确的string.as_str()代替。