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`