【发布时间】:2016-08-11 18:10:39
【问题描述】:
我写了以下代码:
pub struct Serializer;
pub trait Serialize<T> {
fn to_bert(&self, data: T) -> Vec<u8>;
}
pub trait Convert<T> {
fn to_binary(&self, data: T) -> Vec<u8>;
}
impl<'a> Convert<&'a str> for Serializer {
fn to_binary(&self, data: &'a str) -> Vec<u8> {
let binary_string = data.as_bytes();
let binary_length = binary_string.len() as i16;
let mut binary = vec![];
binary.write_i16::<BigEndian>(binary_length).unwrap();
binary.extend(binary_string.iter().clone());
binary
}
}
impl Serialize<String> for Serializer {
fn to_bert(&self, data: String) -> Vec<u8> {
let binary_string = self.to_binary(&data);
self.generate_term(BertTag::String, binary_string)
}
}
impl<'a> Serialize<&'a str> for Serializer {
fn to_bert(&self, data: &'a str) -> Vec<u8> {
let binary_string = self.to_binary(data);
self.generate_term(BertTag::String, binary_string)
}
}
编译时,我收到一个错误,提示编译器找不到正确的调用函数:
error: the trait bound `serializers::Serializer: serializers::Convert<&std::string::String>` is not satisfied [E0277]
let binary_string = self.to_binary(&data);
^~~~~~~~~
help: run `rustc --explain E0277` to see a detailed explanation
help: the following implementations were found:
help: <serializers::Serializer as serializers::Convert<&'a str>>
help: <serializers::Serializer as serializers::Convert<types::BertType>>
为什么当我指定&str 的生命周期时,编译器找不到正确的实现?我该如何解决这个问题?
【问题讨论】:
-
为什么你认为
Serializer应该实现Convert<&String>?我看到的是Convert<&'a str>,而不是&String。 -
@Shepmaster 当我将
&data作为参数传递给to_binary函数时,我希望&String将转换为&str。