Generics 如何缩短长where子句?

Generics 如何缩短长where子句?,generics,rust,Generics,Rust,我有以下声明: impl任务处理器 哪里 R:hyper::service::service+Clone+Send+Sync+'静态, R::Response:std::iter::Iterator, 未来:发送, R::Error:std::Error::Error+Send+Sync, { } 我想将where之后的条件移动到它自己的特性中,这样我就可以编写如下内容: impl<T: JobContext, R: DnsResolve> TaskProcessor<T,

我有以下声明:

impl任务处理器
哪里
R:hyper::service::service+Clone+Send+Sync+'静态,
R::Response:std::iter::Iterator,
未来:发送,
R::Error:std::Error::Error+Send+Sync,
{
}
我想将
where
之后的条件移动到它自己的特性中,这样我就可以编写如下内容:

impl<T: JobContext, R: DnsResolve> TaskProcessor<T, R> { }
impl任务处理器{}

做这件事的最佳方法是什么?

以下解决了我的问题

trait DnsResolve: hyper::service::Service<hyper::client::connect::dns::Name, Response: std::iter::Iterator<Item = std::net::SocketAddr>, Future: Send, Error: std::error::Error + Send + Sync> + Clone + Send + Sync + 'static
{
}

impl<T> DnsResolve for T where T: hyper::service::Service<hyper::client::connect::dns::Name, Response: std::iter::Iterator<Item = std::net::SocketAddr>, Future: Send, Error: std::error::Error + Send + Sync> + Clone + Send + Sync + 'static,
{
}
trait DnsResolve:hyper::service::service+Clone+Send+Sync+”静态
{
}
T的impl DnsResolve,其中T:hyper::service::service+Clone+Send+Sync+'静态,
{
}
但这使用了不稳定的特性

我不得不用每晚的rustc来编译我的代码。。。我真的不喜欢


这个话题对我来说相当复杂,有没有办法绕过stable rust中相关的类型界限?

看起来你的问题可能会由的答案来回答。如果没有,请回答您的问题以解释差异。否则,我们可以将这个问题标记为已回答。我还要提到,long
where
子句是工作的一部分,您很快就会习惯它们。在Java中,类型签名主要是一件琐事,而在Rust中,你会发现它们实际上传递了有用的信息并有助于可读性。我不介意在一个地方声明太长,问题是我有一些嵌套类型,它们有点通过这个
TaskProcessor
类型(它是
R
)。。。除非我在使用
TaskProcessor
的所有类型中拖动这个长声明,否则rust将不允许我编译。复制粘贴是bad@Shepmaster我的where子句在
hyper::service::service
中定义了嵌套的特征类型(
Response
Future
Error
),我不知道如何在新的特征中引用它们。例如,我将非常感激……一个简单的方法是将项目导入范围。