我有一个针对str的特质定义,在这个定义中,我定义了一个需要 &self 的函数。如果我从主函数中对静态 &str 调用此函数,则一切正常。但是,如果我从接受特质对象参数的函数中调用同样的函数,则会出现以下错误:
MyTrait is not implemented for the type
&str[E0277]
我已经找到了一个解决方法,但我不清楚成本,我是否正在复制字符串?#[derive(Debug)]
struct Thingie{
pub name: String, // rather than &a str for Thingie<'a>
}
trait MyTrait{
fn to_thingie(&self)->Option<Thingie>;
}
impl MyTrait for str{
fn to_thingie(&self)->Option<Thingie>{
println!(">>MyTrait for str");
Some(Thingie{name:self.to_string()})
}
}
fn method_on_trait <T:MyTrait> (thing:T){
let v= thing.to_thingie();
println!("Method on trait: {:?}",v);
}
fn main(){
println!("in main: {:?}","test".to_thingie());
method_on_trait("test");
}
//TODO: Uncomment this for a fix. WHY?
//Is this creating a copy of the string or just transfering the binding?
// impl<'a> MyTrait for &'a str{
// fn to_thingie(&self)->Option<Thingie>{
// println!(">>MyTrait<'a> for &'a str");
// (*self).to_thingie()
// }
// }