为什么特性`core :: fmt :: Show`没有为`core :: fmt :: Show + Sized`类型实现?

时间:2014-12-23 18:04:03

标签: rust

我正在尝试编译一些代码,但我收到了一个非常奇怪的错误:

  

特征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>
}

这对我来说没什么意义。这是编译器中的错误吗?

提前致谢!

1 个答案:

答案 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问题。