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
),我不知道如何在新的特征中引用它们。例如,我将非常感激……一个简单的方法是将项目导入范围。