我正在尝试编译一些代码,但我收到了一个非常奇怪的错误:
特征
实施core::fmt::Show
未针对类型core::fmt::Show + Sized
代码:
use std::fmt::Show;
fn main() {
println!("{}", return_showed()); // Error occurs here
}
fn return_showed() -> Box<Show+Sized+'static> {
box "test" as Box<Show+Sized>
}
这对我来说没什么意义。这是编译器中的错误吗?
提前致谢!
答案 0 :(得分:1)
Rust 1.0
原始问题中发布的代码现在按预期编译。
<强>原始强>
如果您不需要Sized
,那么您可以使用:
fn show_boxed() -> Box<Show+'static> { // '
box "test"
}
fn main() {
println!("{}", &*show_boxed());
}
据我了解,&*
将取消引用,然后重新引用Box。这会将其从Box<core::fmt::Show>
更改为&core::fmt::Show
,格式化机制知道如何处理。
修改强>
你也可以选择你想要的特质对象:
fn return_showed() -> Box<Show+Sized+'static> { // '
box "test" as Box<Show+Sized>
}
fn main() {
let z: &Show = &*return_showed();
println!("{}", z);
}
我同意这不太理想;可能值得提出Rust问题。