在通用结构中导出Show

时间:2014-12-27 15:21:08

标签: rust traits bounds

我试图了解Rust中的一些概念,但我陷入了一个非常简单的问题。我正在尝试定义一个我想要打印的结构。如果我指定组件的类型(在示例中用T替换f32),一切都很好。但如果我想一般性地这样做:

#[deriving(Show)]
struct Point<T> {
    x: T,
    y: T,
    z: T,
}

fn main() {
    let v = Point{x: 3., y: 4., z: 5.,};
    println!("The point is {}" , v);
}

http://play.rust-lang.org/中的输出是:

  

错误:无法推断出足够的类型信息来定位impl   类型core::fmt::Show的特征_;类型注释   需要

如果我尝试指定类型:

use std::fmt;

#[deriving(Show)]
struct Point<T: std::fmt::Show> {
    x: T,
    y: T,
    z: T,
}

fn main() {
    let v = Point{x: 3., y: 4., z: 5.,};
    println!("The point is {}" , v);
}

输出结果为:

  

错误:特征std::fmt::Show已经出现在边界列表中   [E0127]之前的出现在这里#[derinding(Show)]

这是为什么?怎么解决?

1 个答案:

答案 0 :(得分:1)

3.不够具体,无法为其自己命名类型 - 它可能是f32的{​​{1}}。你可以更明确地(至少)这两种方式:

f64