Rust 使用未声明的类型或模块core::fmt::Display

Rust 使用未声明的类型或模块core::fmt::Display,rust,Rust,我有一些代码可以很好地处理精确类型,但是当我添加泛型时,它会抛出一个错误 它给出了以下错误,我的代码如下: 类型T[E0277]未实现traitcore::fmt::Display fn-own(x:T)->T { x } 结构体类型 { 值:T, 下一步:选项 } impl节点 { fn打印(&self) { 让mut current=self; 环路{ println!(“{}”,current.value); 匹配当前。下一个{ Some(ref next)=>{current=&**n

我有一些代码可以很好地处理精确类型,但是当我添加泛型时,它会抛出一个错误

它给出了以下错误,我的代码如下:

类型
T
[E0277]未实现trait
core::fmt::Display

fn-own(x:T)->T
{ 
x
}
结构体类型
{
值:T,
下一步:选项
}
impl节点
{
fn打印(&self)
{
让mut current=self;
环路{
println!(“{}”,current.value);
匹配当前。下一个{
Some(ref next)=>{current=&**next;},
无=>中断,
}
} 
}
fn添加(&mut self,节点:节点)
{
让item=Some(Box::new(node));
让mut current=self;
环路{
匹配自己(当前)。下一步{
ref mut slot@None=>{*slot=item;return},
一些(参考mut next)=>当前=下一个
}
} 
}
}
fn main(){
让leaf=Node{value:10,next:None};
让branch=Node{value:50,next:Some(Box::new(leaf))};
让mut root=Node{value:100,next:Some(Box::new(branch))};
root.print();
让new_leaf=Node{value:5,next:None};
根。添加(新叶);
root.print();
}
我知道这是所有语言中泛型的常见错误,但当我尝试向泛型添加约束时,我会遇到另一个错误:


这是一个丑陋的锈疣,我希望有一天能解决它。短版本是您想要的
std::fmt::Display
,而不是
core::fmt::Display

impl<T> Node<T>
where
    T: std::fmt::Display,
{
    // ...
}
impl节点
哪里
T:std::fmt::显示,
{
// ...
}
较长的答案是,Rust标准库分为两部分:
std
core
<代码>核心
是(强调我的):

锈核库是锈蚀标准库的无依赖性基础。它是语言及其库之间的可移植粘合剂,定义了所有代码的内在和原始构建块。它没有链接到上游库、系统库和libc

核心库是最小的:它甚至不知道堆分配,也不提供并发性或I/O。这些都需要平台集成,而且这个库与平台无关

不建议使用核心库libcore的稳定功能从标准库重新导出。该图书馆的组成可能会随着时间的推移而发生变化;只有通过libstd公开的接口才是稳定的


core
std
中实现一次项是愚蠢的,因此标准库在其自身下从
core
重新导出项。但是,来自
core
的代码知道自己是
core
,而不是
std
,因此错误消息指的是较低的级别。

谢谢,但是当我编写
impl节点时,您可以编写
impl节点,其中T:std::fmt::Display
,它们都可以编译。这里有什么区别,一些(协方差)和其他细节吗?在这种情况下它们是相同的。我发誓这是一个完整的问题,但有一个问题。如果有任何进一步的困惑,请随意提出另一个问题。
impl<T> Node<T>
where
    T: std::fmt::Display,
{
    // ...
}