String Rust中的字符串引用比较

String Rust中的字符串引用比较,string,rust,comparison,String,Rust,Comparison,我刚刚确认了Vec::contains的工作原理。我写了下面的代码,它看起来工作得很好 但我不知道为什么它会起作用,因为它比较&String类型。这是否意味着即使字符串未被解引用,字符串比较仍然有效 struct NewStruct{ 字符串_vec:vec, } fn main(){ 让mut mys=NewStruct{ 字符串_vec:vec:::new(), }; mys.string_vec.push(Some(“newarray.to_string())); 让ref|st=mys.

我刚刚确认了
Vec::contains
的工作原理。我写了下面的代码,它看起来工作得很好

但我不知道为什么它会起作用,因为它比较
&String
类型。这是否意味着即使字符串未被解引用,字符串比较仍然有效

struct NewStruct{
字符串_vec:vec,
}
fn main(){
让mut mys=NewStruct{
字符串_vec:vec:::new(),
};
mys.string_vec.push(Some(“newarray.to_string()));
让ref|st=mys.string_vec.iter().filter(|o|o.is_some()).map(|o|o.as_ref().unwrap()).collect:();
println!((“结果:{:?}”),ref_st.包含(&&&((“某些字符串”.to_字符串()));
println!(“结果:{:?}”,ref_st.contains(&&&((“新数组”.to_字符串()));
println!(“你好,世界!”);
f64::from(1234_u64作为i32);
}

Rust中引用的引用比较始终比较值,而不是地址。这不仅适用于
&String
,而且适用于任何
&T

例如,这不会编译,因为
Foo
没有实现
PartialEq
,即使我只是比较引用:

struct Foo;

fn main() {
    let a = Foo;
    let b = Foo;

    assert!(&a == &b);
}
引用的
PartialEq
实现是


impl partialeQ这是否回答了您的问题@Jmb这不是因为自动取消引用,而是因为引用上的相等性比较值。
error[E0369]: binary operation `==` cannot be applied to type `&Foo`
 --> src/main.rs:7:16
  |
7 |     assert!(&a == &b);
  |             -- ^^ -- &Foo
  |             |
  |             &Foo
  |
  = note: an implementation of `std::cmp::PartialEq` might be missing for `&Foo`