Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何编写专门的trait实现?_Rust_Traits - Fatal编程技术网

Rust 如何编写专门的trait实现?

Rust 如何编写专门的trait实现?,rust,traits,Rust,Traits,我正在Iterator上编写一个扩展trait来显示控制台上的进度: 长迭代器中的项的。具有进度(“对齐二锂矩阵…”){ ... } 我的目标是,如果迭代器也实现了ExactSizeIterator,它将显示一个带有百分比的进度条;如果不是,则显示不确定的微调器 我希望我能做到这一点,让编译器明白更多的“派生”实现应该优先,但遗憾的是: pub结构进程计数器{ 内心:我, ... } ProgressIterator的impl迭代器{ ... } 有进步就有进步{ fn与_进度(self,me

我正在
Iterator
上编写一个扩展trait来显示控制台上的进度:

长迭代器中的项的
。具有进度(“对齐二锂矩阵…”){
...
}
我的目标是,如果
迭代器
也实现了
ExactSizeIterator
,它将显示一个带有百分比的进度条;如果不是,则显示不确定的微调器

我希望我能做到这一点,让编译器明白更多的“派生”实现应该优先,但遗憾的是:

pub结构进程计数器{
内心:我,
...
}
ProgressIterator的impl迭代器{
...
}
有进步就有进步{
fn与_进度(self,message:&str)->impl迭代器;
}
为我实现进步{
fn与_进度(self,message:&str)->impl迭代器{
进程计数器{…}
}
}
为我实现进步{
fn与_进度(self,message:&str)->impl迭代器{
进程计数器{…}
}
}
但是,唉,锈不是这样起作用的:

error[E0119]: conflicting implementations of trait `progress::WithProgress<_>`
error[E0119]:trait`progress::WithProgress的实现冲突`

有没有办法让这一切顺利进行?或者我现在的解决方案是使用两个不相关的特性和不同的命名方法吗?

有,但到目前为止还不受支持。不过请注意,已经有很多这样的库,而且您的设计看起来有点像。而且。。。专门研究
ExactSizeIterator
似乎是多余的:ESI提供了实用方法,但本质上ESI“只是”一个迭代器,其中
size\u提示的边界匹配,因此您可以在运行时简单地使用该信息(
ExactSizeIterator::len
无论如何都会检查它)。FWIW.@Masklin我确实在使用
indicatif
来渲染进度条,但它的特点并不像我所希望的那样符合人体工程学:你要么使用
progress\u,要么自己指定长度,要么使用
progress
并使用默认样式。我想我只使用
size\u hint()
,但我认为更一般的问题“这种专业化是否可能”仍然存在。有,但到目前为止它还不被支持。尽管注意到已经有很多这样的库,而且您的设计看起来有点像。而且。。。专门研究
ExactSizeIterator
似乎是多余的:ESI提供了实用方法,但本质上ESI“只是”一个迭代器,其中
size\u提示的边界匹配,因此您可以在运行时简单地使用该信息(
ExactSizeIterator::len
无论如何都会检查它)。FWIW.@Masklin我确实在使用
indicatif
来渲染进度条,但它的特点并不像我所希望的那样符合人体工程学:你要么使用
progress\u,要么自己指定长度,要么使用
progress
并使用默认样式。我想我只使用
size\u hint()
,但我认为更一般的问题“这种专业化是否可能”仍然悬而未决。