string

字符串比较的解决方案

fn main() {
  let s = String::new();
  match &s {
    "" => {}
    _ => {}
  }
}
  • match s.as_ref()。 这个方法是最通用最直观的办法。
  • match s.borrow()。为了使用这个方法,我们必须引入Borrow trait。也就是需要加上代码use std::borrow::Borrow;。
  • match s.deref()。 这个方法通过主动调用deref()方法,达到类型转换的目的。此时我们需要引入Deref trait方可以通过编译,即加上代码use std::ops::Deref;。
  • match &*s。 我们可以通过*s运算符,也可以强制调用deref()方法,与上面的做法一样。
  • match &s[..]。这个方案也是可以的,这里利用了String重载的Index操作。

String解引用

s         : String
&s        : &String
Target    : str
s.deref() : &str
*s        : str
&*s       : &str

同时接受&str和String类型

impl Person {
    fn new<S: Into<String>>(name: S) -> Person {
        Person { name: name.into() }
    }
}