在通用结构中派生 Show
Posted
技术标签:
【中文标题】在通用结构中派生 Show【英文标题】:Deriving Show in a generic struct 【发布时间】:2015-02-24 10:38:49 【问题描述】:我试图理解 Rust 中的一些概念,但我遇到了一个非常简单的问题。我正在尝试定义一个然后要打印的结构。如果我指定组件的类型(在示例中将T
替换为f32
),一切都很好。但是,如果我想通用地这样做:
#[deriving(Show)]
struct Point<T>
x: T,
y: T,
z: T,
fn main()
let v = Pointx: 3., y: 4., z: 5.,;
println!("The point is " , v);
http://play.rust-lang.org/ 中的输出为:
错误:无法推断出足够的类型信息来定位
_
类型的特征core::fmt::Show
;类型注释 必填
如果我尝试指定类型:
use std::fmt;
#[deriving(Show)]
struct Point<T: std::fmt::Show>
x: T,
y: T,
z: T,
fn main()
let v = Pointx: 3., y: 4., z: 5.,;
println!("The point is " , v);
输出是:
错误:特征
std::fmt::Show
已经出现在边界列表中 [E0127] 以前的出现在这里#[deriving(Show)]
这是为什么?如何解决?
【问题讨论】:
【参考方案1】:3.
不够具体,无法单独命名类型 - 它可以是 f32
或 f64
。您可以(至少)通过以下两种方式更加明确:
let v = Pointx: 3f32, y: 4f32, z: 5f32;
let v: Point<f32> = Pointx: 3., y: 4., z: 5.;
【讨论】:
我以为我没有指定结构体,而不是我错误地实例化了结构体。 @Hernan:第一个错误确实是由于未指定结构的成员引起的。第二个错误似乎是#[deriving(Show)]
自动添加Show
绑定在T
上引起的;通过自己添加它,它最终会出现两次。以上是关于在通用结构中派生 Show的主要内容,如果未能解决你的问题,请参考以下文章