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]未实现traitcore::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,
{
// ...
}