【发布时间】:2019-03-13 06:24:26
【问题描述】:
我有以下两个特点:
trait Filter {
type Message;
fn is_valid(&self, message: &Self::Message) -> bool;
}
trait Client {
type Message;
fn send(&self, message: &Self::Message) -> Result<(), Error>;
}
我希望Filter 和Client 的实现使用相同的Message 类型。
struct ClientWithFilter<C: Client, F: Filter> {
filter: F,
client: C,
}
impl<C: Client, F: Filter> ClientWithFilter<C, F> {
/// C::Message or F::Message???
fn check_and_send(&self, message: &C::Message) -> Result<(), Error> {
if self.filter.is_valid(message) {
self.client.send(message)
} else {
Err(Error::MessageInvalid)
}
}
}
这不会编译:
if self.filter.is_valid(message) {
| ^^^^^^^ expected client::Filter::Message, found client::Client::Message
|
= note: expected type `&<F as client::Filter>::Message`
found type `&<C as client::Client>::Message`
编译器会看到 2 种不同的类型,我希望其中有一种。 如何以正确的方式在 Rust 中编写这个?
【问题讨论】:
-
"This doesn't compile":如果无法编译,请添加错误消息,以便我们轻松重现您的问题..
-
能否包含错误信息?除非您这样做,否则我们无法帮助您。
标签: rust associated-types