我有一个str的特性定义,我定义了一个函数,其自身为&。如果我从静态的& str的main调用这个函数,一切都很好。如果我把从一个函数取一个特征对象参数相同的功能,我招呼着以下错误:MyTrait is not implemented for the type
& STR [E0277]
特性不适用于'&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()
// }
// }
我不知道这是否是一种好的礼仪,下面是这段代码片段的铁锈乐园链接:https://play.rust-lang.org/?gist=10bd0d565e9106e1900c&version=stable –